Skip to content

Commit 3a88d44

Browse files
committed
Support saving images with non-RGB palettes as PNGs
1 parent adb463c commit 3a88d44

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

Tests/test_file_png.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,16 @@ def test_plte_length(self, tmp_path: Path) -> None:
707707
assert reloaded.png.im_palette is not None
708708
assert len(reloaded.png.im_palette[1]) == 3
709709

710+
def test_plte_cmyk(self, tmp_path: Path) -> None:
711+
im = Image.new("P", (1, 1))
712+
im.putpalette((0, 100, 150, 200), "CMYK")
713+
714+
out = tmp_path / "temp.png"
715+
im.save(out)
716+
717+
with Image.open(out) as reloaded:
718+
assert reloaded.convert("CMYK").getpixel((0, 0)) == (200, 222, 232, 0)
719+
710720
def test_getxmp(self) -> None:
711721
with Image.open("Tests/images/color_snakes.png") as im:
712722
if ElementTree is None:

src/PIL/PngImagePlugin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,7 @@ def _save(
14351435

14361436
if im.mode == "P":
14371437
palette_byte_number = colors * 3
1438-
palette_bytes = im.im.getpalette("RGB")[:palette_byte_number]
1438+
palette_bytes = bytes(im.getpalette()[:palette_byte_number])
14391439
while len(palette_bytes) < palette_byte_number:
14401440
palette_bytes += b"\0"
14411441
chunk(fp, b"PLTE", palette_bytes)

0 commit comments

Comments
 (0)