diff --git a/Tests/test_file_libtiff.py b/Tests/test_file_libtiff.py index fe9d017c086..f491f9875d9 100644 --- a/Tests/test_file_libtiff.py +++ b/Tests/test_file_libtiff.py @@ -685,13 +685,18 @@ def test_save_ycbcr(self, tmp_path: Path) -> None: assert reloaded.tag_v2[530] == (1, 1) assert reloaded.tag_v2[532] == (0, 255, 128, 255, 128, 255) - def test_exif_ifd(self, tmp_path: Path) -> None: - outfile = str(tmp_path / "temp.tif") + def test_exif_ifd(self) -> None: + out = io.BytesIO() with Image.open("Tests/images/tiff_adobe_deflate.tif") as im: assert im.tag_v2[34665] == 125456 - im.save(outfile) + im.save(out, "TIFF") - with Image.open(outfile) as reloaded: + with Image.open(out) as reloaded: + assert 34665 not in reloaded.tag_v2 + + im.save(out, "TIFF", tiffinfo={34665: 125456}) + + with Image.open(out) as reloaded: if Image.core.libtiff_support_custom_tags: assert reloaded.tag_v2[34665] == 125456 diff --git a/src/PIL/TiffImagePlugin.py b/src/PIL/TiffImagePlugin.py index 1629c090fa7..ac5b63c1bc4 100644 --- a/src/PIL/TiffImagePlugin.py +++ b/src/PIL/TiffImagePlugin.py @@ -1663,10 +1663,14 @@ def _save(im, fp, filename): legacy_ifd = im.tag.to_v2() supplied_tags = {**legacy_ifd, **getattr(im, "tag_v2", {})} - if SAMPLEFORMAT in supplied_tags: - # SAMPLEFORMAT is determined by the image format and should not be copied - # from legacy_ifd. - del supplied_tags[SAMPLEFORMAT] + for tag in ( + # IFD offset that may not be correct in the saved image + EXIFIFD, + # Determined by the image format and should not be copied from legacy_ifd. + SAMPLEFORMAT, + ): + if tag in supplied_tags: + del supplied_tags[tag] # additions written by Greg Couch, gregc@cgl.ucsf.edu # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com