mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-13 02:36:17 +03:00
Merge pull request #7788 from radarhere/gif_disposal
This commit is contained in:
commit
93bf9912e2
|
@ -647,6 +647,9 @@ def test_dispose2_palette(tmp_path: Path) -> None:
|
||||||
# Center remains red every frame
|
# Center remains red every frame
|
||||||
assert rgb_img.getpixel((50, 50)) == circle
|
assert rgb_img.getpixel((50, 50)) == circle
|
||||||
|
|
||||||
|
# Check that frame transparency wasn't added unnecessarily
|
||||||
|
assert img._frame_transparency is None
|
||||||
|
|
||||||
|
|
||||||
def test_dispose2_diff(tmp_path: Path) -> None:
|
def test_dispose2_diff(tmp_path: Path) -> None:
|
||||||
out = str(tmp_path / "temp.gif")
|
out = str(tmp_path / "temp.gif")
|
||||||
|
@ -734,6 +737,25 @@ def test_dispose2_background_frame(tmp_path: Path) -> None:
|
||||||
assert im.n_frames == 3
|
assert im.n_frames == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_dispose2_previous_frame(tmp_path: Path) -> None:
|
||||||
|
out = str(tmp_path / "temp.gif")
|
||||||
|
|
||||||
|
im = Image.new("P", (100, 100))
|
||||||
|
im.info["transparency"] = 0
|
||||||
|
d = ImageDraw.Draw(im)
|
||||||
|
d.rectangle([(0, 0), (100, 50)], 1)
|
||||||
|
im.putpalette((0, 0, 0, 255, 0, 0))
|
||||||
|
|
||||||
|
im2 = Image.new("P", (100, 100))
|
||||||
|
im2.putpalette((0, 0, 0))
|
||||||
|
|
||||||
|
im.save(out, save_all=True, append_images=[im2], disposal=[0, 2])
|
||||||
|
|
||||||
|
with Image.open(out) as im:
|
||||||
|
im.seek(1)
|
||||||
|
assert im.getpixel((0, 0)) == (0, 0, 0, 255)
|
||||||
|
|
||||||
|
|
||||||
def test_transparency_in_second_frame(tmp_path: Path) -> None:
|
def test_transparency_in_second_frame(tmp_path: Path) -> None:
|
||||||
out = str(tmp_path / "temp.gif")
|
out = str(tmp_path / "temp.gif")
|
||||||
with Image.open("Tests/images/different_transparency.gif") as im:
|
with Image.open("Tests/images/different_transparency.gif") as im:
|
||||||
|
|
|
@ -629,7 +629,7 @@ def _write_multiple_frames(im, fp, palette):
|
||||||
"duration"
|
"duration"
|
||||||
]
|
]
|
||||||
continue
|
continue
|
||||||
if encoderinfo.get("disposal") == 2:
|
if im_frames[-1]["encoderinfo"].get("disposal") == 2:
|
||||||
if background_im is None:
|
if background_im is None:
|
||||||
color = im.encoderinfo.get(
|
color = im.encoderinfo.get(
|
||||||
"transparency", im.info.get("transparency", (0, 0, 0))
|
"transparency", im.info.get("transparency", (0, 0, 0))
|
||||||
|
@ -637,8 +637,8 @@ def _write_multiple_frames(im, fp, palette):
|
||||||
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)
|
||||||
background_im.putpalette(im_frames[0]["im"].palette)
|
background_im.putpalette(im_frames[0]["im"].palette)
|
||||||
delta, bbox = _getbbox(background_im, im_frame)
|
bbox = _getbbox(background_im, im_frame)[1]
|
||||||
if 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:
|
||||||
try:
|
try:
|
||||||
encoderinfo["transparency"] = (
|
encoderinfo["transparency"] = (
|
||||||
|
|
Loading…
Reference in New Issue
Block a user