diff --git a/Tests/test_imagepalette.py b/Tests/test_imagepalette.py index 2fcf6cffead..aa0882b3e0c 100644 --- a/Tests/test_imagepalette.py +++ b/Tests/test_imagepalette.py @@ -215,7 +215,9 @@ def test_rawmode_getdata() -> None: # Assert assert rawmode == "RGB" - assert data_in == data_out + assert data_out == bytes(data_in) + im = Image.new("P", (1, 1)) + im.im.putpalette("RGB", rawmode, data_out) def test_2bit_palette(tmp_path: Path) -> None: diff --git a/src/PIL/ImagePalette.py b/src/PIL/ImagePalette.py index 6eff2eeeb72..80a44fa7f6c 100644 --- a/src/PIL/ImagePalette.py +++ b/src/PIL/ImagePalette.py @@ -97,7 +97,13 @@ def copy(self) -> ImagePalette: return new - def getdata(self) -> tuple[str, Sequence[int] | bytes | bytearray]: + def _tobytes(self) -> bytes: + if isinstance(self.palette, bytes): + return self.palette + arr = array.array("B", self.palette) + return arr.tobytes() + + def getdata(self) -> tuple[str, bytes]: """ Get palette contents in format suitable for the low-level ``im.putpalette`` primitive. @@ -105,7 +111,7 @@ def getdata(self) -> tuple[str, Sequence[int] | bytes | bytearray]: .. warning:: This method is experimental. """ if self.rawmode: - return self.rawmode, self.palette + return self.rawmode, self._tobytes() return self.mode, self.tobytes() def tobytes(self) -> bytes: @@ -116,10 +122,7 @@ def tobytes(self) -> bytes: if self.rawmode: msg = "palette contains raw palette data" raise ValueError(msg) - if isinstance(self.palette, bytes): - return self.palette - arr = array.array("B", self.palette) - return arr.tobytes() + return self._tobytes() # Declare tostring as an alias for tobytes tostring = tobytes