Skip to content

Commit

Permalink
When saving RGBA, make use of first transparent palette entry
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Nov 30, 2021
1 parent bd00cd9 commit 59b08e4
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 1 deletion.
10 changes: 10 additions & 0 deletions Tests/test_file_gif.py
Expand Up @@ -927,3 +927,13 @@ def test_missing_background():
with Image.open("Tests/images/missing_background.gif") as im:
im.seek(1)
assert_image_equal_tofile(im, "Tests/images/missing_background_first_frame.gif")


def test_saving_rgba(tmp_path):
out = str(tmp_path / "temp.gif")
with Image.open("Tests/images/transparent.png") as im:
im.save(out)

with Image.open(out) as reloaded:
reloaded_rgba = reloaded.convert("RGBA")
assert reloaded_rgba.load()[0, 0][3] == 0
8 changes: 7 additions & 1 deletion src/PIL/GifImagePlugin.py
Expand Up @@ -370,7 +370,13 @@ def _normalize_mode(im, initial_call=False):
palette_size = 256
if im.palette:
palette_size = len(im.palette.getdata()[1]) // 3
return im.convert("P", palette=Image.ADAPTIVE, colors=palette_size)
im = im.convert("P", palette=Image.ADAPTIVE, colors=palette_size)
if im.palette.mode == "RGBA":
for rgba in im.palette.colors.keys():
if rgba[3] == 0:
im.info["transparency"] = im.palette.colors[rgba]
break
return im
else:
return im.convert("P")
return im.convert("L")
Expand Down

0 comments on commit 59b08e4

Please sign in to comment.