Blame 0003-Fix-palette-handling-for-Pillow-9.1.0.patch

4337bea
From 2276111bb56aa08f815b8790763dfaae3fb6578f Mon Sep 17 00:00:00 2001
4337bea
From: "James R. Barlow" <james@purplerock.ca>
4337bea
Date: Fri, 15 Apr 2022 00:58:07 -0700
4337bea
Subject: [PATCH 3/3] Fix palette handling for Pillow 9.1.0
4337bea
4337bea
(cherry picked from commit 4f6923fe33c2d7e78d1482a5eb2beb6e9155977b)
4337bea
---
4337bea
 src/pikepdf/models/image.py | 8 ++++----
4337bea
 tests/test_image_access.py  | 3 ++-
4337bea
 2 files changed, 6 insertions(+), 5 deletions(-)
4337bea
4337bea
diff --git a/src/pikepdf/models/image.py b/src/pikepdf/models/image.py
4337bea
index 632036e..e3d6aff 100644
4337bea
--- a/src/pikepdf/models/image.py
4337bea
+++ b/src/pikepdf/models/image.py
4337bea
@@ -484,12 +484,12 @@ class PdfImage(PdfImageBase):
4337bea
         if self.mode == 'P' and self.bits_per_component == 1:
4337bea
             # Fix paletted 1-bit images
4337bea
             base_mode, palette = self.palette
4337bea
-            if base_mode == 'RGB' and palette != b'\x00\x00\x00\xff\xff\xff':
4337bea
+            if base_mode == 'RGB':
4337bea
                 im = im.convert('P')
4337bea
+                if len(palette) == 6:
4337bea
+                    # rgbrgb -> rgb000000...rgb
4337bea
+                    palette = palette[0:3] + (b'\x00\x00\x00' * (256 - 2)) + palette[3:6]
4337bea
                 im.putpalette(palette, rawmode=base_mode)
4337bea
-                gp = im.getpalette()
4337bea
-                gp[765:768] = gp[3:6]  # work around Pillow bug
4337bea
-                im.putpalette(gp)
4337bea
             elif base_mode == 'L' and palette != b'\x00\xff':
4337bea
                 im = im.convert('P')
4337bea
                 im.putpalette(palette, rawmode=base_mode)
4337bea
diff --git a/tests/test_image_access.py b/tests/test_image_access.py
4337bea
index 55624e4..dd33b2c 100644
4337bea
--- a/tests/test_image_access.py
4337bea
+++ b/tests/test_image_access.py
4337bea
@@ -297,7 +297,8 @@ def test_image_palette(resources, filename, bpc, rgb):
4337bea
     outstream = BytesIO()
4337bea
     pim.extract_to(stream=outstream)
4337bea
 
4337bea
-    im = pim.as_pil_image().convert('RGB')
4337bea
+    im_pal = pim.as_pil_image()
4337bea
+    im = im_pal.convert('RGB')
4337bea
     assert im.getpixel((1, 1)) == rgb
4337bea
 
4337bea
 
4337bea
-- 
4337bea
2.39.2
4337bea