diff --git a/Tests/test_image_putpalette.py b/Tests/test_image_putpalette.py index 237de63305a..6b89807db34 100644 --- a/Tests/test_image_putpalette.py +++ b/Tests/test_image_putpalette.py @@ -11,6 +11,9 @@ def test_putpalette() -> None: def palette(mode: str) -> str | tuple[str, list[int]]: im = hopper(mode).copy() im.putpalette(list(range(256)) * 3) + assert im.palette is not None + assert im.palette.dirty + p = im.getpalette() if p: return im.mode, p[:10] @@ -86,6 +89,8 @@ def test_putpalette_with_alpha_values() -> None: def test_rgba_palette(mode: str, palette: tuple[int, ...]) -> None: im = Image.new("P", (1, 1)) im.putpalette(palette, mode) + assert im.palette is not None + assert im.palette.dirty == (1 if mode == "RGBA" else 0) assert im.getpalette() == [1, 2, 3] assert im.palette is not None assert im.palette.colors == {(1, 2, 3, 4): 0} @@ -101,6 +106,8 @@ def test_rgba_palette(mode: str, palette: tuple[int, ...]) -> None: def test_cmyk_palette(mode: str, palette: tuple[int, ...]) -> None: im = Image.new("P", (1, 1)) im.putpalette(palette, mode) + assert im.palette is not None + assert im.palette.dirty == (1 if mode == "CMYK" else 0) assert im.getpalette() == [250, 249, 248] assert im.palette is not None assert im.palette.colors == {(1, 2, 3, 4): 0} diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 873de8607bf..5ffbcc27277 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2170,7 +2170,10 @@ def putpalette( self.palette.mode = "CMYK" elif "A" in rawmode: self.palette.mode = "RGBA" - self.load() # install new palette + if self.palette.mode == self.palette.rawmode: + self.palette.rawmode = None + if self.palette.rawmode: + self.load() # decode raw palette data def putpixel( self,