Skip to content

Commit d8afcb7

Browse files
committed
Do not update palette for L mode frame
1 parent 58e4874 commit d8afcb7

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed
15.9 KB
Loading

Tests/test_file_gif.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ def test_l_mode_after_rgb() -> None:
100100
assert im.mode == "RGB"
101101

102102

103+
def test_l_mode_transparency_after_rgb() -> None:
104+
with Image.open("Tests/images/no_palette_with_transparency_after_rgb.gif") as im:
105+
expected = im.convert("RGB")
106+
d = ImageDraw.Draw(expected)
107+
d.rectangle([(0, 0), (64, 128)], fill="#000")
108+
109+
im.seek(1)
110+
assert im.mode == "RGB"
111+
112+
assert_image_equal(im, expected)
113+
114+
103115
def test_palette_not_needed_for_second_frame() -> None:
104116
with Image.open("Tests/images/palette_not_needed_for_second_frame.gif") as im:
105117
im.seek(1)

src/PIL/GifImagePlugin.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,8 +477,11 @@ def load_end(self) -> None:
477477
self._prev_im = expanded_im
478478
assert self._prev_im is not None
479479
if self._frame_transparency is not None:
480-
self.im.putpalettealpha(self._frame_transparency, 0)
481-
frame_im = self.im.convert("RGBA")
480+
if self.mode == "L":
481+
frame_im = self.im.convert_transparent("LA", self._frame_transparency)
482+
else:
483+
self.im.putpalettealpha(self._frame_transparency, 0)
484+
frame_im = self.im.convert("RGBA")
482485
else:
483486
frame_im = self.im.convert("RGB")
484487

@@ -487,7 +490,7 @@ def load_end(self) -> None:
487490

488491
self.im = self._prev_im
489492
self._mode = self.im.mode
490-
if frame_im.mode == "RGBA":
493+
if frame_im.mode in ("LA", "RGBA"):
491494
self.im.paste(frame_im, self.dispose_extent, frame_im)
492495
else:
493496
self.im.paste(frame_im, self.dispose_extent)

0 commit comments

Comments
 (0)