summaryrefslogtreecommitdiff
path: root/openerp/tools/image.py
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2014-09-08 15:53:02 +0200
committerFabien Meghazi <fme@openerp.com>2014-09-16 19:55:00 +0200
commit89362bd6cd3daab7acdd2e1416f594fcf7b3ea59 (patch)
treec73cf1bdf0292dd107301105596e470a9a7b013f /openerp/tools/image.py
parent8ccd4c67e598469c5ea02aee80fc64590a1bf242 (diff)
[ADD] tools.image_save_for_web() helper for image compression
Diffstat (limited to 'openerp/tools/image.py')
-rw-r--r--openerp/tools/image.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/openerp/tools/image.py b/openerp/tools/image.py
index afa12ced511..bf81be88388 100644
--- a/openerp/tools/image.py
+++ b/openerp/tools/image.py
@@ -115,6 +115,28 @@ def image_resize_and_sharpen(image, size, factor=2.0):
image.paste(resized_image, ((size[0] - resized_image.size[0]) / 2, (size[1] - resized_image.size[1]) / 2))
return image
+def image_save_for_web(image, fp=None):
+ """
+ Save image optimized for web usage.
+
+ :param image: PIL.Image.Image()
+ :param fp: File name or file object. If not specified, a bytestring is returned.
+ """
+ opt = dict(format=image.format)
+ if image.format == 'PNG':
+ opt.update(optimize=True)
+ if image.mode != 'P':
+ # Floyd Steinberg dithering by default
+ image = image.convert('RGBA').convert('P', palette=Image.WEB, colors=256)
+ elif image.format == 'JPEG':
+ opt.update(optimize=True, quality=80)
+ if fp:
+ image.save(fp, **opt)
+ else:
+ img = StringIO.StringIO()
+ image.save(img, **opt)
+ return img.getvalue()
+
def image_resize_image_big(base64_source, size=(1204, 1024), encoding='base64', filetype=None, avoid_if_small=True):
""" Wrapper on image_resize_image, to resize images larger than the standard
'big' image size: 1024x1024px.