diff --git a/PIL/WebPImagePlugin.py b/PIL/WebPImagePlugin.py index 36579dddd..39a8f2e35 100644 --- a/PIL/WebPImagePlugin.py +++ b/PIL/WebPImagePlugin.py @@ -167,7 +167,7 @@ class WebPImageFile(ImageFile.ImageFile): def _save_all(im, fp, filename): encoderinfo = im.encoderinfo.copy() - append_images = encoderinfo.get("append_images", []) + append_images = list(encoderinfo.get("append_images", [])) # If total frame count is 1, then save using the legacy API, which # will preserve non-alpha modes diff --git a/Tests/test_file_webp_animated.py b/Tests/test_file_webp_animated.py index 516cb1b7f..f98cde764 100644 --- a/Tests/test_file_webp_animated.py +++ b/Tests/test_file_webp_animated.py @@ -65,23 +65,35 @@ class TestFileWebpAnimation(PillowTestCase): are visually similar to the originals. """ - temp_file = self.tempfile("temp.webp") + def check(temp_file): + im = Image.open(temp_file) + self.assertEqual(im.n_frames, 2) + + # Compare first frame to original + im.load() + self.assert_image_equal(im, frame1.convert("RGBA")) + + # Compare second frame to original + im.seek(1) + im.load() + self.assert_image_equal(im, frame2.convert("RGBA")) + frame1 = Image.open('Tests/images/anim_frame1.webp') frame2 = Image.open('Tests/images/anim_frame2.webp') - frame1.save(temp_file, + + temp_file1 = self.tempfile("temp.webp") + frame1.copy().save(temp_file1, save_all=True, append_images=[frame2], lossless=True) + check(temp_file1) - im = Image.open(temp_file) - self.assertEqual(im.n_frames, 2) - - # Compare first frame to original - im.load() - self.assert_image_equal(im, frame1.convert("RGBA")) - - # Compare second frame to original - im.seek(1) - im.load() - self.assert_image_equal(im, frame2.convert("RGBA")) + # Tests appending using a generator + def imGenerator(ims): + for im in ims: + yield im + temp_file2 = self.tempfile("temp_generator.webp") + frame1.copy().save(temp_file2, + save_all=True, append_images=imGenerator([frame2]), lossless=True) + check(temp_file2) def test_timestamp_and_duration(self): """