Skip to content

Commit a85d3b1

Browse files
authored
Only update Python palette when loading an image if rawmode was different (python-pillow#9309)
2 parents 932aa68 + 5b677ca commit a85d3b1

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

Tests/test_imagedraw.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,22 @@ def test_sanity() -> None:
6868
draw.rectangle(list(range(4)))
6969

7070

71-
def test_valueerror() -> None:
71+
def test_new_color() -> None:
7272
with Image.open("Tests/images/chi.gif") as im:
7373
draw = ImageDraw.Draw(im)
74+
assert im.palette is not None
75+
assert len(im.palette.colors) == 249
76+
77+
# Test drawing a new color onto the palette
7478
draw.line((0, 0), fill=(0, 0, 0))
79+
assert im.palette is not None
80+
assert len(im.palette.colors) == 250
81+
assert im.palette.dirty
82+
83+
# Test drawing another new color, now that the palette is dirty
84+
draw.point((0, 0), fill=(1, 0, 0))
85+
assert len(im.palette.colors) == 251
86+
assert im.convert("RGB").getpixel((0, 0)) == (1, 0, 0)
7587

7688

7789
def test_mode_mismatch() -> None:

src/PIL/Image.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -892,7 +892,9 @@ def load(self) -> core.PixelAccess | None:
892892
else:
893893
self.im.putpalettealphas(self.info["transparency"])
894894
self.palette.mode = "RGBA"
895-
else:
895+
elif self.palette.mode != mode:
896+
# If the palette rawmode is different to the mode,
897+
# then update the Python palette data
896898
self.palette.palette = self.im.getpalette(
897899
self.palette.mode, self.palette.mode
898900
)

0 commit comments

Comments
 (0)