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..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,6 +841,7 @@ class Image: self.palette.mode = "RGBA" else: self.palette.mode = "RGB" + 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 *