[Erp5-report] r28974 - in /erp5/trunk/products/PortalTransforms: ./ libtransforms/ tests/ t...
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Sep 11 16:26:56 CEST 2009
Author: kazuhiko
Date: Fri Sep 11 16:26:55 2009
New Revision: 28974
URL: http://svn.erp5.org?rev=28974&view=rev
Log:
Use ImageMagick's 'convert' program instead of PIL to handle CMYK images well.
Added:
erp5/trunk/products/PortalTransforms/libtransforms/imagemagick_transform.py
erp5/trunk/products/PortalTransforms/tests/testImageMagickPortalTransforms.py
Modified:
erp5/trunk/products/PortalTransforms/HISTORY.txt
erp5/trunk/products/PortalTransforms/transforms/image_to_bmp.py
erp5/trunk/products/PortalTransforms/transforms/image_to_gif.py
erp5/trunk/products/PortalTransforms/transforms/image_to_jpeg.py
erp5/trunk/products/PortalTransforms/transforms/image_to_pcx.py
erp5/trunk/products/PortalTransforms/transforms/image_to_png.py
erp5/trunk/products/PortalTransforms/transforms/image_to_ppm.py
erp5/trunk/products/PortalTransforms/transforms/image_to_tiff.py
Modified: erp5/trunk/products/PortalTransforms/HISTORY.txt
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/HISTORY.txt?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/HISTORY.txt [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/HISTORY.txt [utf8] Fri Sep 11 16:26:55 2009
@@ -1,3 +1,9 @@
+1.4.2-nexedi
+=========================
+
+ * Use ImageMagick's 'convert' program instead of PIL to handle CMYK
+ images well.
+
1.4.1-nexedi - 2009-03-03
=========================
Added: erp5/trunk/products/PortalTransforms/libtransforms/imagemagick_transform.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/libtransforms/imagemagick_transform.py?rev=28974&view=auto
==============================================================================
--- erp5/trunk/products/PortalTransforms/libtransforms/imagemagick_transform.py (added)
+++ erp5/trunk/products/PortalTransforms/libtransforms/imagemagick_transform.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,0 +1,47 @@
+from Products.PortalTransforms.interfaces import itransform
+import subprocess
+
+class ImageMagickTransforms:
+ __implements__ = itransform
+ __name__ = "imagemagick_transforms"
+ def __init__(self, name=None):
+ if name is not None:
+ self.__name__ = name
+
+ def name(self):
+ return self.__name__
+
+ def convert(self, orig, data, **kwargs):
+ parameter_list = ['convert']
+ newwidth = kwargs.get('width','')
+ newheight = kwargs.get('height','')
+ if newwidth and newheight:
+ parameter_list.extend('-resize', '%sx%s!' % (newwidth, newheight))
+ elif newwidth or newheight:
+ parameter_list.extend('-resize', '%sx%s' % (newwidth, newheight))
+ parameter_list.append('-')
+ parameter_list.append('%s:-' % self.format)
+ process = subprocess.Popen(parameter_list,
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ close_fds=True)
+ imgin, imgout, err = process.stdin, process.stdout, process.stderr
+
+ def writeData(stream, data):
+ if isinstance(data, str):
+ stream.write(data)
+ else:
+ # Use PData structure to prevent
+ # consuming too much memory
+ while data is not None:
+ stream.write(data.data)
+ data = data.next
+
+ writeData(imgin, orig)
+ imgin.close()
+ data.setData(imgout.read())
+ return data
+
+def register():
+ return ImageMagickTransforms()
Added: erp5/trunk/products/PortalTransforms/tests/testImageMagickPortalTransforms.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/tests/testImageMagickPortalTransforms.py?rev=28974&view=auto
==============================================================================
--- erp5/trunk/products/PortalTransforms/tests/testImageMagickPortalTransforms.py (added)
+++ erp5/trunk/products/PortalTransforms/tests/testImageMagickPortalTransforms.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,0 +1,86 @@
+import os
+
+from Testing import ZopeTestCase
+from Products.PortalTransforms.tests.utils import input_file_path, normalize_html,\
+ matching_inputs
+from Products.PortalTransforms.transforms.image_to_gif import image_to_gif
+from Products.PortalTransforms.transforms.image_to_png import image_to_png
+from Products.PortalTransforms.transforms.image_to_jpeg import image_to_jpeg
+from Products.PortalTransforms.transforms.image_to_bmp import image_to_bmp
+from Products.PortalTransforms.transforms.image_to_tiff import image_to_tiff
+from Products.PortalTransforms.transforms.image_to_ppm import image_to_ppm
+from Products.PortalTransforms.transforms.image_to_pcx import image_to_pcx
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+
+# we have to set locale because lynx output is locale sensitive !
+os.environ['LC_ALL'] = 'C'
+
+class ImageMagickTransformsTest(ERP5TypeTestCase, ZopeTestCase.Functional):
+ def afterSetUp(self):
+ ERP5TypeTestCase.afterSetUp(self)
+ self.pt = self.portal.portal_transforms
+
+ def test_image_to_bmp(self):
+ self.pt.registerTransform(image_to_bmp())
+ imgFile = open(input_file_path('logo.jpg'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/jpeg')
+ data = self.pt.convertTo(target_mimetype='image/x-ms-bmp',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/x-ms-bmp')
+
+ def test_image_to_gif(self):
+ self.pt.registerTransform(image_to_gif())
+ imgFile = open(input_file_path('logo.png'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/png')
+ data = self.pt.convertTo(target_mimetype='image/gif',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/gif')
+
+ def test_image_to_jpeg(self):
+ self.pt.registerTransform(image_to_jpeg())
+ imgFile = open(input_file_path('logo.gif'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/gif')
+ data = self.pt.convertTo(target_mimetype='image/jpeg',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/jpeg')
+
+ def test_image_to_png(self):
+ self.pt.registerTransform(image_to_png())
+ imgFile = open(input_file_path('logo.jpg'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/jpeg')
+ data = self.pt.convertTo(target_mimetype='image/png',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/png')
+
+ def test_image_to_pcx(self):
+ self.pt.registerTransform(image_to_pcx())
+ imgFile = open(input_file_path('logo.gif'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/gif')
+ data = self.pt.convertTo(target_mimetype='image/pcx',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/pcx')
+
+ def test_image_to_ppm(self):
+ self.pt.registerTransform(image_to_ppm())
+ imgFile = open(input_file_path('logo.png'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/png')
+ data = self.pt.convertTo(target_mimetype='image/x-portable-pixmap',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/x-portable-pixmap')
+
+ def test_image_to_tiff(self):
+ self.pt.registerTransform(image_to_tiff())
+ imgFile = open(input_file_path('logo.jpg'), 'rb')
+ data = imgFile.read()
+ self.failUnlessEqual(self.portal.mimetypes_registry.classify(data),'image/jpeg')
+ data = self.pt.convertTo(target_mimetype='image/tiff',orig=data)
+ self.failUnlessEqual(data.getMetadata()['mimetype'], 'image/tiff')
+
+
+# FIXME missing tests for image_to_html, st
+
+def test_suite():
+ from unittest import TestSuite, makeSuite
+ suite = TestSuite()
+ suite.addTest(makeSuite(ImageMagickTransformsTest))
+ return suite
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_bmp.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_bmp.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_bmp.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_bmp.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_bmp(PILTransforms):
+class image_to_bmp(ImageMagickTransforms):
__name__ = "image_to_bmp"
inputs = ('image/*', )
output = 'image/x-ms-bmp'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_gif.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_gif.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_gif.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_gif.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_gif(PILTransforms):
+class image_to_gif(ImageMagickTransforms):
__name__ = "image_to_gif"
inputs = ('image/*', )
output = 'image/gif'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_jpeg.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_jpeg.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_jpeg.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_jpeg.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_jpeg(PILTransforms):
+class image_to_jpeg(ImageMagickTransforms):
__name__ = "image_to_jpeg"
inputs = ('image/*', )
output = 'image/jpeg'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_pcx.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_pcx.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_pcx.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_pcx.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_pcx(PILTransforms):
+class image_to_pcx(ImageMagickTransforms):
__name__ = "image_to_pcx"
inputs = ('image/*', )
output = 'image/pcx'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_png.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_png.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_png.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_png.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_png(PILTransforms):
+class image_to_png(ImageMagickTransforms):
__name__ = "image_to_png"
inputs = ('image/*', )
output = 'image/png'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_ppm.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_ppm.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_ppm.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_ppm.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_ppm(PILTransforms):
+class image_to_ppm(ImageMagickTransforms):
__name__ = "image_to_ppm"
inputs = ('image/*', )
output = 'image/x-portable-pixmap'
Modified: erp5/trunk/products/PortalTransforms/transforms/image_to_tiff.py
URL: http://svn.erp5.org/erp5/trunk/products/PortalTransforms/transforms/image_to_tiff.py?rev=28974&r1=28973&r2=28974&view=diff
==============================================================================
--- erp5/trunk/products/PortalTransforms/transforms/image_to_tiff.py [utf8] (original)
+++ erp5/trunk/products/PortalTransforms/transforms/image_to_tiff.py [utf8] Fri Sep 11 16:26:55 2009
@@ -1,6 +1,6 @@
-from Products.PortalTransforms.libtransforms.piltransform import PILTransforms
+from Products.PortalTransforms.libtransforms.imagemagick_transform import ImageMagickTransforms
-class image_to_tiff(PILTransforms):
+class image_to_tiff(ImageMagickTransforms):
__name__ = "image_to_tiff"
inputs = ('image/*', )
output = 'image/tiff'
More information about the Erp5-report
mailing list