diff --git a/Tests/test_image_convert.py b/Tests/test_image_convert.py index bbe9267d6..01bcbb95f 100644 --- a/Tests/test_image_convert.py +++ b/Tests/test_image_convert.py @@ -155,6 +155,12 @@ def test_trns_RGB(tmp_path): assert "transparency" not in im_p.info im_p.save(f) + im = Image.new("RGB", (1, 1)) + im.info["transparency"] = im.getpixel((0, 0)) + im_p = im.convert("P", palette=Image.ADAPTIVE) + assert im_p.info["transparency"] == im_p.getpixel((0, 0)) + im_p.save(f) + def test_gif_with_rgba_palette_to_p(): # See https://github.com/python-pillow/Pillow/issues/2433 diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index 236a44e37..f762d3032 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -53,10 +53,12 @@ class ImagePalette: self._palette = palette mode_len = len(self.mode) - self.colors = { - tuple(self.palette[i : i + mode_len]): i // mode_len - for i in range(0, len(self.palette), mode_len) - } + self.colors = {} + for i in range(0, len(self.palette), mode_len): + color = tuple(self.palette[i : i + mode_len]) + if color in self.colors: + continue + self.colors[color] = i // mode_len def copy(self): new = ImagePalette()