diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index aa0882b3e0c..1f62b1f8f7e 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -179,17 +179,23 @@ def test_make_gamma_lut() -> None: assert lut[255] == 255 -def test_rawmode_valueerrors(tmp_path: Path) -> None: +def test_raw() -> None: + data = list(range(256)) * 3 + palette = ImagePalette.raw("RGB", data) + assert palette.tobytes() == bytes(data) + + +def test_raw_valueerrors(tmp_path: Path) -> None: # Arrange - palette = ImagePalette.raw("RGB", list(range(256)) * 3) + palette = ImagePalette.raw("BGR", list(range(256)) * 3) # Act / Assert - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="palette contains raw palette data"): palette.tobytes() - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="palette contains raw palette data"): palette.getcolor((1, 2, 3)) f = str(tmp_path / "temp.lut") - with pytest.raises(ValueError): + with pytest.raises(ValueError, match="palette contains raw palette data"): palette.save(f) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 82e71035787..4f77af1ec5f 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2161,11 +2161,7 @@ def putpalette( msg = "illegal image mode" raise ValueError(msg) if isinstance(data, ImagePalette.ImagePalette): - if data.rawmode is not None: - palette = ImagePalette.raw(data.rawmode, data.palette) - else: - palette = ImagePalette.ImagePalette(palette=data.palette) - palette.dirty = 1 + palette = ImagePalette.raw(data.rawmode or "RGB", data.palette) else: if not isinstance(data, bytes): data = bytes(data) diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index 80a44fa7f6c..b775eef85d0 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -233,7 +233,8 @@ def save(self, fp: str | IO[str]) -> None: def raw(rawmode: str, data: Sequence[int] | bytes | bytearray) -> ImagePalette: palette = ImagePalette() - palette.rawmode = rawmode + if rawmode != "RGB": + palette.rawmode = rawmode palette.palette = data palette.dirty = 1 return palette