EXIF 数据存储在照片的哪个位置?(JPEG、PNG、HEIC)
EXIF 究竟存在照片文件内的什么地方?APP1 头、IFD 树、字节偏移,以及 JPEG、HEIC、PNG、TIFF 和 WebP 各自如何存储它。
简短回答: EXIF 存储在图像文件本身内部,而不是在一个单独的伴随文件里。在 JPEG 中,它位于 APP1 标记段,这是一个头部区块,在文件开头附近以字节 0xFFE1 起始,标签以 TIFF/IFD 树的形式排列其中(IFD0、一个 Exif 子 IFD,以及一个 GPS IFD)。在 HEIC 中,同样的标签位于容器的元数据盒里;在 PNG 中,它们可以位于一个 eXIf 区块里;TIFF 则原生地存储它们。因为数据是嵌入的,所以每当你复制或发送照片时,它都会随之一起传递。把任何照片拖进我们的 EXIF 查看器 就能看到里面有什么;不会上传任何东西。
人们常以为元数据存在手机上某个隐藏的数据库里,或存在照片旁边的一个小文件里。其实并非如此。「何时、何地、如何」被直接写进了图像文件的字节中,写在文件前端附近一个保留区域里。本指南解释 那个区域在哪,以及当你编辑或分享照片时会发生什么。
简短版:它在文件里,靠近顶部
打开任何一张刚从相机拍出的 JPEG,看看前面的几百个字节。在图像起始标记(0xFFD8)之后,你最先遇到的东西之一就是 APP1 标记段,它容纳了整个 EXIF 区块。压缩后的像素在它 之后。所以一个典型的相机 JPEG 是这样排布的:0xFFD8 起始标记、容纳 EXIF 的 0xFFE1 APP1 标记、可选的头部(APP2 ICC 配置文件、APP13 IPTC、XMP)、像素数据,然后是 0xFFD9 结束标记。因为 EXIF 位于顶部附近的一个头部里,与像素分开,所以一次干净的 EXIF 编辑不会重新压缩图像;工具只重写头部区域。
IFD 树:IFD0、Exif 子 IFD、GPS IFD
APP1 段以 0xFFE1、一个两字节的长度,以及标识符 Exif\0\0 开头。紧接其后,载荷以一个小小的 TIFF 头 开始:EXIF 在内部其实是一个嵌入 JPEG 内的小型 TIFF 文件。那个头声明了字节序(II 小端或 MM 大端)以及指向第一个标签目录的偏移。
从那里开始,标签被组织成一棵 IFD(Image File Directory,图像文件目录)的树,而不是一个扁平的列表。每个 IFD 都有自己的职责:
- IFD0(「第 0 个」或「TIFF」目录):相机与图像层级的字段,如 Make、Model、Software、Orientation 和 Copyright。它还容纳两个指针标签,指向下面的子目录。
- Exif 子 IFD:拍摄当下的技术数据。DateTimeOriginal、曝光设置、镜头、ISO、色彩空间。
- GPS IFD:纬度、经度、海拔,以及 GPS 推导出的时间戳,只有在记录了位置时才存在。
- IFD1(「第 1 个」目录):相机生成的一张嵌入缩略图。
读取器会遍历这棵树:从 TIFF 头出发,跳到 IFD0,跟随 Exif 指针获取拍摄设置,跟随 GPS 指针获取位置。我们的 EXIF 查看器 正是这么做的,并把每个目录摆在它自己的表格里;EXIF 标签参考 则是每个字段的完整字典。能塞进四个字节的值就内联存放在标签条目里;较大的值,比如一个 GPS 坐标,存放在段内别处,而条目里持有一个指向它们的字节偏移。
其他格式如何存储相同的标签
EXIF 的 标签 在各格式间大体相同。不同的是标签被塞进去的那个容器。
- JPEG / JPG:上面描述的 APP1 标记段。
- TIFF:原生地存储 EXIF。一个 TIFF 文件 本身就是 一个 IFD 的结构,所以 EXIF 不是外加上去的,它是基础格式的一部分。JPEG 的 EXIF 是借用了这种 TIFF 布局的一份拷贝。
- HEIC:自 iOS 11 起 iPhone 的默认格式。它的 HEIF 容器由嵌套的「盒(box)」构成,EXIF 标签位于一个项目元数据盒里,而非 JPEG 风格的标记。同样的标签,不同的搁放方式。
- PNG:可以在一个专用的
eXIf区块里携带 EXIF;较简单的工具有时改用tEXt或iTXt文本区块。许多网页导出的 PNG 完全不携带任何 EXIF。 - WebP:把 EXIF 存在它的 RIFF 容器内的一个
EXIF区块里。
标签参考详细涵盖了 各格式的编辑注意事项。
为什么「嵌入」很重要:元数据随文件一起传递
因为 EXIF 位于文件内部,所以它跟着照片去到文件去的每一个地方。把 JPEG 复制到 U 盘、附在电子邮件上,或丢进一个共享文件夹,GPS 坐标和拍摄时间都会一起跟来。这正是为什么元数据对举证如此有用、对隐私如此有风险:证据,以及泄露,都被烤进了文件里。
它也解释了为什么移除 EXIF 不是一行删除就能搞定。这些标签交织进了文件的头部结构,所以清除它们意味着 重写文件,把那个区域去掉。我们的 EXIF 移除工具 在你的浏览器中做这件事。
当你编辑、截图或上传时会发生什么
因为 EXIF 是文件的一部分,什么会存活下来取决于文件是否被重新编码:
- 复制、移动、重命名:字节没变,所以 EXIF 被保留。
- 裁切、旋转、轻度编辑:大多数编辑器保留这个区块,只更新尺寸和方向标签。有些会重写它;之后用 查看器 检查。
- 截图:截图是一张全新的图像,带有它自己的极简 EXIF,不含原图任何相机或 GPS 数据。它实际上等于一次元数据清除。
- 上传到社交平台:Instagram、Facebook、X 和 WhatsApp 通过重新编码在上传时清除 EXIF。像电子邮件、Dropbox 和 AirDrop 这样的文件分享工具会保留它。
关于 EXIF 记录了什么、以及人们为什么要查看它的更大全貌,请看 什么是 EXIF 数据。
常见问题
EXIF 是存在照片旁边的一个单独文件里吗? 不是,它嵌入在图像文件本身内部。(有些专业 RAW 工作流会使用 .xmp 伴随文件,但 JPEG、HEIC、PNG 或 TIFF 中的标准 EXIF 都位于图像内部。)
APP1 区块和 IFD 有什么区别? APP1 是 JPEG 中容纳 EXIF 的那个槽位。IFD(IFD0、Exif 子 IFD、GPS IFD)是那个槽位 内部 的目录树。
结论
EXIF 并不存在某个隐藏的应用数据库或伴随文件里。它嵌入在图像中:在 JPEG 中那意味着顶部附近的 APP1 标记段,结构为一棵 TIFF/IFD 树(IFD0、Exif 子 IFD、GPS IFD)。HEIC、PNG、WebP 和 TIFF 把相同的标签存在它们各自的容器里。因为它被烤了进去,元数据会随每一份拷贝一起传递。
想看你照片的元数据存在哪:EXIF 查看器。想在分享前清除它:EXIF 移除工具。想知道每个标签的含义:EXIF 标签参考。全部在你的浏览器中,不会上传任何东西。