Skip to content

Commit

Permalink
Ignore non-opaque WebP background when saving as GIF
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Dec 8, 2022
1 parent 0d6440d commit 66f5ad0
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 8 deletions.
13 changes: 11 additions & 2 deletions Tests/test_file_gif.py
Expand Up @@ -859,14 +859,23 @@ def test_background(tmp_path):
im.info["background"] = 1
im.save(out)
with Image.open(out) as reread:

assert reread.info["background"] == im.info["background"]


def test_webp_background(tmp_path):
out = str(tmp_path / "temp.gif")

# Test opaque WebP background
if features.check("webp") and features.check("webp_anim"):
with Image.open("Tests/images/hopper.webp") as im:
assert isinstance(im.info["background"], tuple)
assert im.info["background"] == (255, 255, 255, 255)
im.save(out)

# Test non-opaque WebP background
im = Image.new("L", (100, 100), "#000")
im.info["background"] = (0, 0, 0, 0)
im.save(out)


def test_comment(tmp_path):
with Image.open(TEST_GIF) as im:
Expand Down
15 changes: 9 additions & 6 deletions src/PIL/GifImagePlugin.py
Expand Up @@ -886,20 +886,23 @@ def _get_palette_bytes(im):
def _get_background(im, info_background):
background = 0
if info_background:
background = info_background
if isinstance(background, tuple):
if isinstance(info_background, tuple):
# WebPImagePlugin stores an RGBA value in info["background"]
# So it must be converted to the same format as GifImagePlugin's
# info["background"] - a global color table index
try:
background = im.palette.getcolor(background, im)
background = im.palette.getcolor(info_background, im)
except ValueError as e:
if str(e) == "cannot allocate more than 256 colors":
if str(e) not in (
# If all 256 colors are in use,
# then there is no need for the background color
return 0
else:
"cannot allocate more than 256 colors",
# Ignore non-opaque WebP background
"cannot add non-opaque RGBA color to RGB palette",
):
raise
else:
background = info_background
return background


Expand Down

0 comments on commit 66f5ad0

Please sign in to comment.