Skip to content

Commit 3528220

Browse files
JarikfIaroslav Fadeev
andauthored
fix palette images with bytes transparency conversion (#21)
Co-authored-by: Iaroslav Fadeev <[email protected]>
1 parent 41a4704 commit 3528220

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

pillow_heif/heif.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,8 @@ def add_from_pillow(self, pil_image: Image, load_one=False):
300300
if k in frame.info:
301301
additional_info[k] = frame.info[k]
302302
if frame.mode == "P":
303-
frame = frame.convert(mode="RGB")
303+
mode = 'RGBA' if frame.info.get('transparency') else 'RGB'
304+
frame = frame.convert(mode=mode)
304305
# How here we can detect bit depth of Pillow image? pallete.rawmode or maybe something else?
305306
__bit_depth = 8
306307
self._add_frombytes(__bit_depth, frame.mode, frame.size, frame.tobytes(), add_info={**additional_info})
1.11 KB
Loading

tests/opener_encoder_test.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import pytest
66
from PIL import Image, ImageSequence
77

8-
from pillow_heif import options, register_heif_opener
8+
from pillow_heif import options, register_heif_opener, from_pillow
99

1010
imagehash = pytest.importorskip("hashes_test", reason="NumPy not installed")
1111

@@ -102,3 +102,15 @@ def test_alpha_channel():
102102
heic_pillow = Image.open(out_heic)
103103
for i, frame in enumerate(ImageSequence.Iterator(png_pillow)):
104104
compare_hashes([ImageSequence.Iterator(heic_pillow)[i], frame])
105+
106+
107+
@pytest.mark.skipif(not options().hevc_enc, reason="No HEVC encoder.")
108+
def test_palette_with_bytes_tranparency():
109+
png_pillow = Image.open(
110+
Path("images/jpeg_gif_png/palette_with_bytes_transparency.png"))
111+
heif_file = from_pillow(png_pillow)
112+
out_heic = BytesIO()
113+
heif_file.save(out_heic, format="HEIF", quality=90, save_all=True)
114+
heic_pillow = Image.open(out_heic)
115+
assert heic_pillow.heif_file.has_alpha is True
116+
assert heic_pillow.mode == "RGBA"

0 commit comments

Comments
 (0)