Skip to content

GIF error for multiple duration values #4002

@jiangying000

Description

@jiangying000

What did you do?

Using same images and a list of durations to produce a gif

What did you expect to happen?

produce the gif the specified durations

What actually happened?

failed when saving

What are your OS, Python and Pillow versions?

  • OS: win10
  • Python: 3.6
  • Pillow: 6.1.0

to reproduce, add following testcase to Tests/test_file_gif.py, then run pytest Tests/test_file_gif.py

    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))

        # 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)

        # Assert that the first three 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)

err info is:

    if "duration" in im.encoderinfo:
        duration = int(im.encoderinfo["duration"] / 10)
        TypeError: unsupported operand type(s) for /: 'list' and 'int' 

bbox = None
im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo})
if len(im_frames) > 1:
for frame_data in im_frames:

seems like we should copy duration info from im_frames[0] to im when len(im_frames) == 1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions