From f45d2e296d47751e7b414fab724373d637de2dd4 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 19 Jun 2021 09:16:05 +1000 Subject: [PATCH 1/2] Ensure palette string matches RGB mode --- Tests/test_file_tga.py | 7 ++++++- src/PIL/Image.py | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Tests/test_file_tga.py b/Tests/test_file_tga.py index a27b3ffba..3450c9274 100644 --- a/Tests/test_file_tga.py +++ b/Tests/test_file_tga.py @@ -65,10 +65,15 @@ def test_sanity(tmp_path): roundtrip(original_im) -def test_palette_depth_16(): +def test_palette_depth_16(tmp_path): with Image.open("Tests/images/p_16.tga") as im: assert_image_equal_tofile(im.convert("RGB"), "Tests/images/p_16.png") + out = str(tmp_path / "temp.png") + im.save(out) + with Image.open(out) as reloaded: + assert_image_equal_tofile(reloaded.convert("RGB"), "Tests/images/p_16.png") + def test_id_field(): # tga file with id field diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 28bcf4f00..1dfc55b0d 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -841,6 +841,7 @@ class Image: self.palette.mode = "RGBA" else: self.palette.mode = "RGB" + self.palette.palette = self.im.getpalette() if self.im: if cffi and USE_CFFI_ACCESS: From aa4489c9936d3215c0e3adb73638aac117d3681e Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Sat, 19 Jun 2021 09:31:46 +1000 Subject: [PATCH 2/2] Keep palette the same length --- src/PIL/Image.py | 4 ++-- src/_imaging.c | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 1dfc55b0d..8fb7ea576 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -830,7 +830,7 @@ class Image: arr = bytes( value for (index, value) in enumerate(arr) if index % 4 != 3 ) - self.im.putpalette(mode, arr) + palette_length = self.im.putpalette(mode, arr) self.palette.dirty = 0 self.palette.rawmode = None if "transparency" in self.info: @@ -841,7 +841,7 @@ class Image: self.palette.mode = "RGBA" else: self.palette.mode = "RGB" - self.palette.palette = self.im.getpalette() + self.palette.palette = self.im.getpalette()[: palette_length * 3] if self.im: if cffi and USE_CFFI_ACCESS: diff --git a/src/_imaging.c b/src/_imaging.c index 28acbf35a..e2193fec3 100644 --- a/src/_imaging.c +++ b/src/_imaging.c @@ -1663,8 +1663,7 @@ _putpalette(ImagingObject *self, PyObject *args) { unpack(self->image->palette->palette, palette, palettesize * 8 / bits); - Py_INCREF(Py_None); - return Py_None; + return PyLong_FromLong(palettesize * 8 / bits); } static PyObject *