From d8afcb762fdc2a8d8e06deedd903993ab26805d8 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Wed, 23 Apr 2025 23:09:08 +1000 Subject: [PATCH] Do not update palette for L mode frame --- .../no_palette_with_transparency_after_rgb.gif | Bin 0 -> 16290 bytes Tests/test_file_gif.py | 12 ++++++++++++ src/PIL/GifImagePlugin.py | 9 ++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 Tests/images/no_palette_with_transparency_after_rgb.gif diff --git a/Tests/images/no_palette_with_transparency_after_rgb.gif b/Tests/images/no_palette_with_transparency_after_rgb.gif new file mode 100644 index 0000000000000000000000000000000000000000..41357c1471db6ffeff5ac16d717b97e73f24094d GIT binary patch literal 16290 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 b#g&ycnzVQest<+eu%s{I~DmZd$pp4lG=e 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 None: assert im.mode == "RGB" +def test_l_mode_transparency_after_rgb() -> None: + with Image.open("Tests/images/no_palette_with_transparency_after_rgb.gif") as im: + expected = im.convert("RGB") + d = ImageDraw.Draw(expected) + d.rectangle([(0, 0), (64, 128)], fill="#000") + + im.seek(1) + assert im.mode == "RGB" + + assert_image_equal(im, expected) + + def test_palette_not_needed_for_second_frame() -> None: with Image.open("Tests/images/palette_not_needed_for_second_frame.gif") as im: im.seek(1) diff --git a/src/PIL/GifImagePlugin.py b/src/PIL/GifImagePlugin.py index 4392c4cb9..2102614db 100644 --- a/src/PIL/GifImagePlugin.py +++ b/src/PIL/GifImagePlugin.py @@ -477,8 +477,11 @@ class GifImageFile(ImageFile.ImageFile): self._prev_im = expanded_im assert self._prev_im is not None if self._frame_transparency is not None: - self.im.putpalettealpha(self._frame_transparency, 0) - frame_im = self.im.convert("RGBA") + if self.mode == "L": + frame_im = self.im.convert_transparent("LA", self._frame_transparency) + else: + self.im.putpalettealpha(self._frame_transparency, 0) + frame_im = self.im.convert("RGBA") else: frame_im = self.im.convert("RGB") @@ -487,7 +490,7 @@ class GifImageFile(ImageFile.ImageFile): self.im = self._prev_im self._mode = self.im.mode - if frame_im.mode == "RGBA": + if frame_im.mode in ("LA", "RGBA"): self.im.paste(frame_im, self.dispose_extent, frame_im) else: self.im.paste(frame_im, self.dispose_extent)