|
|
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 |
|