diff --git a/odoo/addons/base/tests/test_image.py b/odoo/addons/base/tests/test_image.py index 32ff385abd0477858763374850b6eb241c5ea04a..c5d55b4eee47c0608d6950b9d02a5d239b74135d 100644 --- a/odoo/addons/base/tests/test_image.py +++ b/odoo/addons/base/tests/test_image.py @@ -314,3 +314,9 @@ class TestImage(TransactionCase): self._assertAlmostEqualSequence(fixed_image.getpixel((size - 1, 0)), expected[1]) # top/right self._assertAlmostEqualSequence(fixed_image.getpixel((0, size - 1)), expected[2]) # bottom/left self._assertAlmostEqualSequence(fixed_image.getpixel((size - 1, size - 1)), expected[3]) # bottom/right + + def test_ptype_image_to_jpeg(self): + """converts to RGB when saving as JPEG""" + image1 = Image.new('P', (1, 1), color='red') + image2 = Image.new('RGB', (1, 1), color='red') + self.assertEqual(tools.image.image_apply_opt(image1, 'JPEG'), tools.image.image_apply_opt(image2, 'JPEG')) diff --git a/odoo/tools/image.py b/odoo/tools/image.py index 4e112ac438afc395541c8d035fab3fe5cea0060c..18380d1202d073a3fb5c515a1f4ff72a76defc3b 100644 --- a/odoo/tools/image.py +++ b/odoo/tools/image.py @@ -460,6 +460,8 @@ def image_apply_opt(image, format, **params): :return: the image formatted :rtype: bytes """ + if format == 'JPEG' and image.mode not in ['1', 'L', 'RGB']: + image = image.convert("RGB") stream = io.BytesIO() image.save(stream, format=format, **params) return stream.getvalue()