Fixed pasting an L frame onto an RGB(A) GIF

This commit is contained in:
Andrew Murray 2022-09-14 00:05:23 +10:00
parent 53664c5f69
commit ae6520ccd6
3 changed files with 15 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 B

View File

@ -83,6 +83,15 @@ def test_l_mode_transparency():
assert im.load()[0, 0] == 128
def test_l_mode_after_rgb():
with Image.open("Tests/images/no_palette_after_rgb.gif") as im:
im.seek(1)
assert im.mode == "RGB"
im.seek(2)
assert im.mode == "RGB"
def test_strategy():
with Image.open("Tests/images/chi.gif") as im:
expected_zero = im.convert("RGB")

View File

@ -432,16 +432,13 @@ class GifImageFile(ImageFile.ImageFile):
self.mode = "RGB"
self.im = self.im.convert("RGB", Image.Dither.FLOYDSTEINBERG)
return
if self.mode == "P" and self._prev_im:
if self._frame_transparency is not None:
self.im.putpalettealpha(self._frame_transparency, 0)
frame_im = self.im.convert("RGBA")
else:
frame_im = self.im.convert("RGB")
if not self._prev_im:
return
if self._frame_transparency is not None:
self.im.putpalettealpha(self._frame_transparency, 0)
frame_im = self.im.convert("RGBA")
else:
if not self._prev_im:
return
frame_im = self.im
frame_im = self.im.convert("RGB")
frame_im = self._crop(frame_im, self.dispose_extent)
self.im = self._prev_im