diff options
author | James R. Barlow <james@purplerock.ca> | 2022-04-15 00:58:07 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2022-04-15 14:49:08 -0700 |
commit | 158ea40a259d06f129c965c6dfd371fd79ab0432 (patch) | |
tree | b2ff1029a08558f14f7498f917b86c6e7fe8c56d | |
parent | 8086837ce1957862f35b80f11b5c3f19ceeb9c23 (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.py | 9 | ||||
-rw-r--r-- | tests/test_image_access.py | 3 |
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 |