mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-25 17:36:18 +03:00
Merge pull request #8494 from radarhere/gif_palette
Improved handling of RGBA palettes when saving GIF images
This commit is contained in:
commit
e40033dfc4
|
@ -4,6 +4,7 @@ import warnings
|
||||||
from collections.abc import Generator
|
from collections.abc import Generator
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -1435,7 +1436,8 @@ def test_saving_rgba(tmp_path: Path) -> None:
|
||||||
assert reloaded_rgba.load()[0, 0][3] == 0
|
assert reloaded_rgba.load()[0, 0][3] == 0
|
||||||
|
|
||||||
|
|
||||||
def test_optimizing_p_rgba(tmp_path: Path) -> None:
|
@pytest.mark.parametrize("params", ({}, {"disposal": 2, "optimize": False}))
|
||||||
|
def test_p_rgba(tmp_path: Path, params: dict[str, Any]) -> None:
|
||||||
out = str(tmp_path / "temp.gif")
|
out = str(tmp_path / "temp.gif")
|
||||||
|
|
||||||
im1 = Image.new("P", (100, 100))
|
im1 = Image.new("P", (100, 100))
|
||||||
|
@ -1447,7 +1449,7 @@ def test_optimizing_p_rgba(tmp_path: Path) -> None:
|
||||||
im2 = Image.new("P", (100, 100))
|
im2 = Image.new("P", (100, 100))
|
||||||
im2.putpalette(data, "RGBA")
|
im2.putpalette(data, "RGBA")
|
||||||
|
|
||||||
im1.save(out, save_all=True, append_images=[im2])
|
im1.save(out, save_all=True, append_images=[im2], **params)
|
||||||
|
|
||||||
with Image.open(out) as reloaded:
|
with Image.open(out) as reloaded:
|
||||||
assert reloaded.n_frames == 2
|
assert reloaded.n_frames == 2
|
||||||
|
|
|
@ -695,8 +695,9 @@ def _write_multiple_frames(
|
||||||
)
|
)
|
||||||
background = _get_background(im_frame, color)
|
background = _get_background(im_frame, color)
|
||||||
background_im = Image.new("P", im_frame.size, background)
|
background_im = Image.new("P", im_frame.size, background)
|
||||||
assert im_frames[0].im.palette is not None
|
first_palette = im_frames[0].im.palette
|
||||||
background_im.putpalette(im_frames[0].im.palette)
|
assert first_palette is not None
|
||||||
|
background_im.putpalette(first_palette, first_palette.mode)
|
||||||
bbox = _getbbox(background_im, im_frame)[1]
|
bbox = _getbbox(background_im, im_frame)[1]
|
||||||
elif encoderinfo.get("optimize") and im_frame.mode != "1":
|
elif encoderinfo.get("optimize") and im_frame.mode != "1":
|
||||||
if "transparency" not in encoderinfo:
|
if "transparency" not in encoderinfo:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user