Merge pull request #5609 from thak1411/round-error

Fixed error saving APNG with duplicate frames and different duration times
This commit is contained in:
Andrew Murray 2021-07-13 21:24:15 +10:00 committed by GitHub
commit 1fd0411ee4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 5 deletions

View File

@ -433,7 +433,9 @@ def test_apng_save_duration_loop(tmp_path):
# test removal of duplicated frames
frame = Image.new("RGBA", (128, 64), (255, 0, 0, 255))
frame.save(test_file, save_all=True, append_images=[frame], duration=[500, 250])
frame.save(
test_file, save_all=True, append_images=[frame, frame], duration=[500, 100, 150]
)
with Image.open(test_file) as im:
im.load()
assert im.n_frames == 1

View File

@ -1117,12 +1117,12 @@ def _write_multiple_frames(im, fp, chunk, rawmode):
and prev_disposal == encoderinfo.get("disposal")
and prev_blend == encoderinfo.get("blend")
):
duration = encoderinfo.get("duration", 0)
if duration:
frame_duration = encoderinfo.get("duration", 0)
if frame_duration:
if "duration" in previous["encoderinfo"]:
previous["encoderinfo"]["duration"] += duration
previous["encoderinfo"]["duration"] += frame_duration
else:
previous["encoderinfo"]["duration"] = duration
previous["encoderinfo"]["duration"] = frame_duration
continue
else:
bbox = None