Blob Blame History Raw
From 2276111bb56aa08f815b8790763dfaae3fb6578f Mon Sep 17 00:00:00 2001
From: "James R. Barlow" <james@purplerock.ca>
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