diff options
| author | Fabien Meghazi <fme@openerp.com> | 2014-09-08 15:53:02 +0200 |
|---|---|---|
| committer | Fabien Meghazi <fme@openerp.com> | 2014-09-16 19:55:00 +0200 |
| commit | 89362bd6cd3daab7acdd2e1416f594fcf7b3ea59 (patch) | |
| tree | c73cf1bdf0292dd107301105596e470a9a7b013f /openerp/tools/image.py | |
| parent | 8ccd4c67e598469c5ea02aee80fc64590a1bf242 (diff) | |
[ADD] tools.image_save_for_web() helper for image compression
Diffstat (limited to 'openerp/tools/image.py')
| -rw-r--r-- | openerp/tools/image.py | 22 |
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. |
