diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 1f335985afc..ac802dd0717 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -356,7 +356,7 @@ def test_save_all() -> None: assert_image_similar(im, im_reloaded, 30) im_rgb = Image.new("RGB", (1, 1)) - for colors in (("#f00",), ("#f00", "#0f0")): + for colors in (("#f00",), ("#f00", "#0f0"), ("#f00", "#0f0", "#00f")): append_images = [Image.new("RGB", (1, 1), color) for color in colors] im_reloaded = roundtrip(im_rgb, save_all=True, append_images=append_images) diff --git a/src/PIL/MpoImagePlugin.py b/src/PIL/MpoImagePlugin.py index a2c89d9df1e..14d1b901d7a 100644 --- a/src/PIL/MpoImagePlugin.py +++ b/src/PIL/MpoImagePlugin.py @@ -51,6 +51,7 @@ def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: return mpf_offset = 28 + prev_offset = 0 offsets: list[int] = [] im_sequences = [im, *append_images] total = sum(getattr(seq, "n_frames", 1) for seq in im_sequences) @@ -72,12 +73,13 @@ def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: mpf_offset += 4 + len(exif) JpegImagePlugin._save(im_frame, fp, filename) - offsets.append(fp.tell()) else: encoderinfo = im_frame._attach_default_encoderinfo(im) im_frame.save(fp, "JPEG") im_frame.encoderinfo = encoderinfo - offsets.append(fp.tell() - offsets[-1]) + offset = fp.tell() + offsets.append(offset - prev_offset) + prev_offset = offset ifd = TiffImagePlugin.ImageFileDirectory_v2() ifd[0xB000] = b"0100"