diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py index 1b60e8016..b9dd19a61 100644 --- a/PIL/TiffImagePlugin.py +++ b/PIL/TiffImagePlugin.py @@ -1784,14 +1784,14 @@ class AppendingTiffWriter: def _save_all(im, fp, filename): encoderinfo = im.encoderinfo.copy() encoderconfig = im.encoderconfig - append_images = encoderinfo.get("append_images", []) + append_images = list(encoderinfo.get("append_images", [])) if not hasattr(im, "n_frames") and not append_images: return _save(im, fp, filename) cur_idx = im.tell() try: with AppendingTiffWriter(fp) as tf: - for ims in itertools.chain([im], append_images): + for ims in [im]+append_images: ims.encoderinfo = encoderinfo ims.encoderconfig = encoderconfig if not hasattr(ims, "n_frames"): 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 ba5d4b3af..f98cde764 100644 --- a/Tests/test_file_webp_animated.py +++ b/Tests/test_file_webp_animated.py @@ -65,25 +65,35 @@ class TestFileWebpAnimation(PillowTestCase): are visually similar to the originals. """ - temp_file = self.tempfile("temp.webp") - temp_file2 = self.tempfile("temp.png") + 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() - im.save(temp_file2) - 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): """