You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Saving a TIFF with EXIF sub-IFDs: compressed save raises "Error setting from dictionary", uncompressed save drops a GPS IFD #10460
The compressed TIFF saves, and its Exif IFD reads back as {34855: 400}, as it does without compression.
The GPS IFD reads back as {1: 'N'} from the TIFF, as it does from JPEG, PNG and WebP.
What actually happened?
The compressed save fails:
_TIFFVSetField: photo.tif: Bad LONG8 or IFD8 value 18446744073709551615 for "EXIFIFDOffset" tag 34665 in ClassicTIFF. Tag won't be written to file.
RuntimeError: Error setting from dictionary
The same happens with tiff_deflate, tiff_adobe_deflate and jpeg compression. 11.0.0 saved the file (without the Exif IFD), so this started in 11.1.0.
The uncompressed TIFF prints TIFF {} while JPEG prints JPEG {1: 'N'}.
For the libtiff path, _save puts the sub-IFD into ifd as a dict (ifd[key] = info.get_ifd(key)), then gives every tag in TAGS_V2_GROUPS the type LONG8, so encode.c calls PyLong_AsLongLong() on the dict and TIFFSetField fails. That type was added in #8529.
For the second case, _save only loops over the Exif keys, and a sub-IFD created with get_ifd() lives in _ifds until a pointer tag is set. Exif.tobytes() handles this since #8635, but the TIFF writer does not.
Activity
radarhere commentedon Nov 8, 2026
I've created #10461 for the second case.