From 8eae4cf1b202d587b41a4f63c3738f095a6d68db Mon Sep 17 00:00:00 2001 From: Jasper van der Neut - Stulen Date: Fri, 23 May 2025 14:16:35 +0200 Subject: [PATCH] Use encoderinfo of first image as default for appended TIFF images If no encoderinfo is specified on an appended TIFF image, use the encoder info from the first image. This restores 11.1.0 behavior, while allowing an image specific override. --- Tests/test_file_tiff.py | 8 ++++++-- src/PIL/TiffImagePlugin.py | 8 +++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Tests/test_file_tiff.py b/Tests/test_file_tiff.py index 502d9df9a33..35b2aa0e3eb 100644 --- a/Tests/test_file_tiff.py +++ b/Tests/test_file_tiff.py @@ -696,15 +696,19 @@ def test_rowsperstrip(self, tmp_path: Path) -> None: im = hopper() im2 = Image.new("L", (128, 128)) im2.encoderinfo = {"tiffinfo": {278: 256}} - im.save(outfile, save_all=True, append_images=[im2]) + im3 = Image.new("L", (128, 128)) + im.save(outfile, save_all=True, append_images=[im2, im3], tiffinfo={278: 512}) with Image.open(outfile) as im: assert isinstance(im, TiffImagePlugin.TiffImageFile) - assert im.tag_v2[278] == 128 + assert im.tag_v2[278] == 512 im.seek(1) assert im.tag_v2[278] == 256 + im.seek(2) + assert im.tag_v2[278] == 512 + def test_strip_raw(self) -> None: infile = "Tests/images/tiff_strip_raw.tif" with Image.open(infile) as im: diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 88af9162e0a..b3ab3a57462 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -2302,7 +2302,9 @@ def fixOffsets( def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: - append_images = list(im.encoderinfo.get("append_images", [])) + encoderinfo = im.encoderinfo.copy() + encoderconfig = im.encoderconfig + append_images = list(encoderinfo.get("append_images", [])) if not hasattr(im, "n_frames") and not append_images: return _save(im, fp, filename) @@ -2311,9 +2313,9 @@ def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: with AppendingTiffWriter(fp) as tf: for ims in [im] + append_images: if not hasattr(ims, "encoderinfo"): - ims.encoderinfo = {} + ims.encoderinfo = encoderinfo if not hasattr(ims, "encoderconfig"): - ims.encoderconfig = () + ims.encoderconfig = encoderconfig nfr = getattr(ims, "n_frames", 1) for idx in range(nfr):