diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 462c95535..13ace9246 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -318,6 +318,9 @@ def test_save_xmp() -> None: im2.encoderinfo = {"xmp": b"Second frame"} im_reloaded = roundtrip(im, xmp=b"First frame", save_all=True, append_images=[im2]) + # Test that encoderinfo is unchanged + assert im2.encoderinfo == {"xmp": b"Second frame"} + assert im_reloaded.info["xmp"] == b"First frame" im_reloaded.seek(1) diff --git a/src/PIL/Image.py b/src/PIL/Image.py index 0be9e8ce4..b17441aa7 100644 --- a/src/PIL/Image.py +++ b/src/PIL/Image.py @@ -2556,7 +2556,8 @@ class Image: self.load() save_all = params.pop("save_all", None) - self.encoderinfo = {**getattr(self, "encoderinfo", {}), **params} + encoderinfo = getattr(self, "encoderinfo", {}) + self.encoderinfo = {**encoderinfo, **params} self.encoderconfig: tuple[Any, ...] = () if format.upper() not in SAVE: @@ -2594,10 +2595,7 @@ class Image: pass raise finally: - try: - del self.encoderinfo - except AttributeError: - pass + self.encoderinfo = encoderinfo if open_fp: fp.close()