Skip to content

Commit

Permalink
Simplifications
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Aug 23, 2019
1 parent 0872cb4 commit 9451dd8
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 36 deletions.
54 changes: 21 additions & 33 deletions Tests/test_file_gif.py
Expand Up @@ -472,7 +472,7 @@ def test_multiple_duration(self):
except EOFError:
pass

def test_partially_identical_frames(self):
def test_identical_frames(self):
duration_list = [1000, 1500, 2000, 4000]

out = self.tempfile("temp.gif")
Expand All @@ -495,41 +495,29 @@ def test_partially_identical_frames(self):
# Assert that the new duration is the total of the identical frames
self.assertEqual(reread.info["duration"], 4500)

def test_totally_identical_frames(self):
duration_list = [1000, 1500, 2000, 4000]

out = self.tempfile("temp.gif")

image_path = "Tests/images/bc7-argb-8bpp_MipMaps-1.png"
im_list = [
Image.open(image_path),
Image.open(image_path),
Image.open(image_path),
Image.open(image_path),
]
mask = Image.new("RGBA", im_list[0].size, (255, 255, 255, 0))

frames = []
for image in im_list:
frames.append(Image.alpha_composite(mask, image))
def test_identical_frames_to_single_frame(self):
for duration in (
[1000, 1500, 2000, 4000],
(1000, 1500, 2000, 4000),
8500
):
out = self.tempfile("temp.gif")
im_list = [
Image.new("L", (100, 100), "#000"),
Image.new("L", (100, 100), "#000"),
Image.new("L", (100, 100), "#000"),
]

# duration as list
frames[0].save(
out,
save_all=True,
append_images=frames[1:],
optimize=False,
duration=duration_list,
loop=0,
transparency=0,
)
reread = Image.open(out)
im_list[0].save(
out, save_all=True, append_images=im_list[1:], duration=duration
)
reread = Image.open(out)

# Assert that all four frames were combined
self.assertEqual(reread.n_frames, 1)
# Assert that all frames were combined
self.assertEqual(reread.n_frames, 1)

# Assert that the new duration is the total of the identical frames
self.assertEqual(reread.info["duration"], 8500)
# Assert that the new duration is the total of the identical frames
self.assertEqual(reread.info["duration"], 8500)

def test_number_of_loops(self):
number_of_loops = 2
Expand Down
6 changes: 3 additions & 3 deletions src/PIL/GifImagePlugin.py
Expand Up @@ -472,9 +472,6 @@ def _write_multiple_frames(im, fp, palette):
else:
bbox = None
im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo})
# see: https://github.com/python-pillow/Pillow/issues/4002
if len(im_frames) == 1 and "duration" in im_frames[0]["encoderinfo"]:
im.encoderinfo["duration"] = im_frames[0]["encoderinfo"]["duration"]

if len(im_frames) > 1:
for frame_data in im_frames:
Expand All @@ -492,6 +489,9 @@ def _write_multiple_frames(im, fp, palette):
offset = frame_data["bbox"][:2]
_write_frame_data(fp, im_frame, offset, frame_data["encoderinfo"])
return True
elif "duration" in im.encoderinfo and isinstance(im.encoderinfo["duration"], (list, tuple)):
# Since multiple frames will not be written, add together the frame durations
im.encoderinfo["duration"] = sum(im.encoderinfo["duration"])


def _save_all(im, fp, filename):
Expand Down

0 comments on commit 9451dd8

Please sign in to comment.