在 TIFF 里,元数据就是文件本身
别的格式都是把元数据外挂上去:JPEG 把一个 TIFF 块塞进 APP1 段,HEIC 把它存成一个条目,PNG 则发明了自己的块。TIFF 没有段,因为它不需要——文件开头是 8 字节的头,指向一个图像文件目录,而这个目录既是标签清单,也是像素数据的索引。你在其他任何地方读 EXIF,读的其实都是一段被复制进别的容器里的 TIFF 片段。
字节序是声明出来的,不是猜的
TIFF 开头要么是 II,要么是 MM——Intel 或 Motorola,小端或大端——紧接着用这个字节序写一个数字 42 作自校验。之后的一切,每一个偏移量、每一个整数,都按这个顺序解读。这正是同一个标签能有两种字节布局的原因,也是为什么 TIFF 一旦被截断就彻底不可读:丢了文件头,你连一个偏移量都没法解释。
一个文件,多个目录
IFD 是串起来的:每个目录的结尾是下一个目录的偏移量,或者是 0。多页扫描件就用这条链存放各页,缩略图通常也待在第二个目录里。EXIF 和 GPS 则是靠指针标签从第一个目录挂下去的子目录。所以下面的标签表给你看的,可能只是若干页中的第一页——而 DNG 这种「加了额外标签的 TIFF」,结构完全一样。
TIFF 把东西放在哪里
- II / MM
- 字节序,位于最开头两个字节。之后一切都按它解读。
- IFD0
- 主目录:图像标签、厂商、型号、方向、分辨率。
- IFD1
- 第二个目录,惯例上是缩略图或下一页。
- ExifIFD
- 曝光、镜头和拍摄时间。一个子目录,由指针标签指向。
- GPSIFD
- 经度、纬度、海拔。另一个子目录。
- StripOffsets
- 像素在哪。它也只是一个普通标签——这正是关键所在。
关于 TIFF
浏览器都显示不了这张图,为什么标签还读得出来?展开
因为读标签是在遍历目录和偏移量,本质上是算术;而显示图像需要针对该文件所用压缩方式的解码器。主流浏览器都不带 TIFF 解码器。所以预览会提示不可用,标签表却是完整的。
DNG 和 TIFF 是一回事吗?展开
从结构上说,基本是。DNG 建立在 TIFF/EP 之上,用的是同一套文件头、同样的目录和同样的 12 字节标签条目,只是多了描述原始传感器数据的标签。你在这里了解到的 IFD 知识对它同样适用。
我的 TIFF 有 40 页,我看到的是哪一页?展开
第一页。这些目录是一个链表,工作区读的是文件头指向的那一个,也就是第一页。后面各页有自己的标签,这里不显示。
TIFF 怎么清理?展开
通过重编码清理,导出为 JPEG。由于 TIFF 的标签和它的像素索引待在同一套结构里,在浏览器里没有办法既丢掉标签又让文件仍然是 TIFF——何况也没有浏览器能写 TIFF。
能做什么
- 删除 EXIF 数据
- 拖入一张照片,下载一份去掉嵌入元数据的副本。JPEG 无损删除 EXIF 段;HEIC、PNG、WebP 等格式通过重编码去除。文件不会上传。
- 删除 GPS 位置
- 先看清照片带着哪组坐标,再下载一份不含坐标的副本。JPEG 只去掉位置标签,其余信息原样保留。文件不会上传。
- 编辑 JPEG EXIF
- 修改 JPEG 的标题、作者、描述、版权、软件和拍摄时间,然后下载编辑后的副本。全部在本地完成,原文件不会被改动。
- XMP、IPTC 与 ICC 查看
- 读取文件携带的每一个元数据分组 —— EXIF、XMP、IPTC、ICC、厂商备注 —— 分组呈现并可导出为 JSON。适用于素材质检、取证和排查处理流程。文件不会上传。
- 打开多张照片
- 一次打开最多五十张照片,看清哪些带有位置信息,并把整批导出成表格。全程不上传,原文件也从不被写入。