From 2276111bb56aa08f815b8790763dfaae3fb6578f Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Fri, 15 Apr 2022 00:58:07 -0700 Subject: [PATCH 3/3] Fix palette handling for Pillow 9.1.0 (cherry picked from commit 4f6923fe33c2d7e78d1482a5eb2beb6e9155977b) --- src/pikepdf/models/image.py | 8 ++++---- tests/test_image_access.py | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/pikepdf/models/image.py b/src/pikepdf/models/image.py index 632036e..e3d6aff 100644 --- a/src/pikepdf/models/image.py +++ b/src/pikepdf/models/image.py @@ -484,12 +484,12 @@ class PdfImage(PdfImageBase): if self.mode == 'P' and self.bits_per_component == 1: # Fix paletted 1-bit images base_mode, palette = self.palette - 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() - 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') im.putpalette(palette, rawmode=base_mode) diff --git a/tests/test_image_access.py b/tests/test_image_access.py index 55624e4..dd33b2c 100644 --- a/tests/test_image_access.py +++ b/tests/test_image_access.py @@ -297,7 +297,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 -- 2.39.2