Skip to content

Commit 203ca12

Browse files
committed
Allow encoderinfo to be set for appended images
1 parent 98f975d commit 203ca12

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

Tests/test_file_mpo.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,3 +293,15 @@ def test_save_all() -> None:
293293
# Test that a single frame image will not be saved as an MPO
294294
jpg = roundtrip(im, save_all=True)
295295
assert "mp" not in jpg.info
296+
297+
298+
def test_save_xmp() -> None:
299+
im = Image.new("RGB", (1, 1))
300+
im2 = Image.new("RGB", (1, 1), "#f00")
301+
im2.encoderinfo = {"xmp": b"Second frame"}
302+
im_reloaded = roundtrip(im, xmp=b"First frame", save_all=True, append_images=[im2])
303+
304+
assert im_reloaded.info["xmp"] == b"First frame"
305+
306+
im_reloaded.seek(1)
307+
assert im_reloaded.info["xmp"] == b"Second frame"

src/PIL/Image.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2565,7 +2565,7 @@ def save(
25652565
self._ensure_mutable()
25662566

25672567
save_all = params.pop("save_all", False)
2568-
self.encoderinfo = params
2568+
self.encoderinfo = {**getattr(self, "encoderinfo", {}), **params}
25692569
self.encoderconfig: tuple[Any, ...] = ()
25702570

25712571
preinit()
@@ -2612,6 +2612,11 @@ def save(
26122612
except PermissionError:
26132613
pass
26142614
raise
2615+
finally:
2616+
try:
2617+
del self.encoderinfo
2618+
except AttributeError:
2619+
pass
26152620
if open_fp:
26162621
fp.close()
26172622

0 commit comments

Comments
 (0)