summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames R. Barlow <james@purplerock.ca>2022-04-15 00:58:07 -0700
committerSean Whitton <spwhitton@spwhitton.name>2022-04-15 14:49:08 -0700
commit158ea40a259d06f129c965c6dfd371fd79ab0432 (patch)
treeb2ff1029a08558f14f7498f917b86c6e7fe8c56d
parent8086837ce1957862f35b80f11b5c3f19ceeb9c23 (diff)
Fix palette handling for Pillow 9.1.0
(cherry picked from commit 4f6923fe33c2d7e78d1482a5eb2beb6e9155977b) Gbp-Pq: Name Fix-palette-handling-for-Pillow-9.1.0.patch
-rw-r--r--src/pikepdf/models/_transcoding.py9
-rw-r--r--tests/test_image_access.py3
2 files changed, 6 insertions, 6 deletions
diff --git a/src/pikepdf/models/_transcoding.py b/src/pikepdf/models/_transcoding.py
index 7e26381..1bfc3d1 100644
--- a/src/pikepdf/models/_transcoding.py
+++ b/src/pikepdf/models/_transcoding.py
@@ -163,13 +163,12 @@ def fix_1bit_palette_image(
im: Image.Image, base_mode: str, palette: BytesLike
) -> Image.Image:
"""Apply palettes to 1-bit images."""
- if base_mode == 'RGB' and palette != b'\x00\x00\x00\xff\xff\xff':
+ if base_mode == 'RGB':
im = im.convert('P')
+ if len(palette) == 6:
+ # rgbrgb -> rgb000000...rgb
+ palette = palette[0:3] + (b'\x00\x00\x00' * (256 - 2)) + palette[3:6]
im.putpalette(palette, rawmode=base_mode)
- gp = im.getpalette()
- if gp:
- gp[765:768] = gp[3:6] # work around Pillow bug
- im.putpalette(gp)
elif base_mode == 'L' and palette != b'\x00\xff':
im = im.convert('P')
try:
diff --git a/tests/test_image_access.py b/tests/test_image_access.py
index 512c2ca..11a3b97 100644
--- a/tests/test_image_access.py
+++ b/tests/test_image_access.py
@@ -516,7 +516,8 @@ def test_image_palette(resources, filename, bpc, rgb):
outstream = BytesIO()
pim.extract_to(stream=outstream)
- im = pim.as_pil_image().convert('RGB')
+ im_pal = pim.as_pil_image()
+ im = im_pal.convert('RGB')
assert im.getpixel((1, 1)) == rgb