Images & photos · Image Metadata Privacy Tool
EXIF, TIFF and IFDs: The 1990s Structure Still Inside Every Photo
· Background
exif file-formats image-privacy
EXIF was published in 1995 and borrowed its data model from TIFF, which is why a metadata block inside a JPEG is really a small TIFF file with directories, tags and offsets. Knowing the structure explains what a stripper can remove cleanly and why.
A TIFF file hiding inside your JPEG — the puzzle of why EXIF looks nothing like the rest of the JPEG format
A JPEG can contain a TIFF-shaped data structure without being a TIFF image. Its APP1 Exif payload begins with an identifier and then a TIFF header whose offsets and directories organise camera, time and GPS values. The shared parser also consumes TIFF blocks found in PNG eXIf and WebP EXIF chunks, which is why one reader serves three containers.
The repository does not establish EXIF’s origin date
The workbook supplied an origin story and year, but the repository sources used here do not establish standards history, organisations or publication dates. Rather than repeat an uncited chronology, this section anchors the useful fact in code: EXIF payloads use TIFF byte order, magic and directory mechanics that a browser parser can inspect without decoding picture data.
TIFF's directory model — the header, byte-order marker, IFD0, and 12-byte entries with tag, type, count and value or offset
The TIFF header says whether multibyte values are little- or big-endian, carries a magic value and points to IFD0. Each directory starts with a count and stores fixed-size entries containing tag, type, value count and either inline data or an offset. That arrangement lets small values sit in the entry while longer strings and rationals live elsewhere in the block.
The directories this parser actually follows
This implementation follows IFD0 and then the Exif and GPS pointers. It deliberately skips the interoperability pointer as a user-facing value and does not chase IFD1 thumbnails recursively. Calling that the complete EXIF directory model would be false; it is the bounded subset needed for the product’s readable location, identity, timestamp, software and technical fields.
Tag numbering and data types — why Make is 0x010F, why rationals are pairs of integers, and why strings end in a null byte
Tags are numeric identifiers interpreted in the context of their directory, while field types determine byte width and decoding. ASCII, integer and rational values receive different treatment. Unknown tags are labelled by hexadecimal number rather than guessed, and any unknown tag inside the GPS directory remains classified as location because its directory supplies that context.
Implementation boundaries that matter today
The operational boundaries matter more here than a version timeline. A directory is capped at 512 entries, values at 64 elements and out-of-range offsets are skipped. MakerNote internals and IFD1 are not decoded. These limits prevent a malformed or hostile block from turning a metadata viewer into an unbounded parser while still allowing its entire container block to be removed.
What this does not cover — the JPEG compression itself and the MakerNote's private formats
The JPEG reader parses only APP1 Exif for display, not XMP or IPTC contents, and unsupported TIFF, DNG and RAW images are rejected despite sharing related structures. A colour profile is deliberately kept during cleaning. The tool therefore demonstrates one contained TIFF-directory use without claiming to be a general TIFF or forensic metadata engine.
Takeaway: EXIF is self-contained by design — the Image Metadata Privacy Tool can show you the directories and remove the whole block without touching the image
EXIF is self-contained enough for whole-block inspection and removal: find the container block, parse the bounded directories you support or drop the block without parsing every private byte. Open a photograph, compare IFD0, Exif and GPS fields in the table, and keep the distinction between readable coverage and removal coverage visible throughout the workflow.