参考
EXIF 数据究竟是什么
EXIF 是相机写进每张照片里的结构化数据。其中绝大部分你一辈子都用不到,真正起作用的只有少数几个字段——它们的含义如下。
EXIF 从何而来
EXIF 是 Exchangeable Image File Format 的缩写,于 1995 年标准化,目的是让数码相机以任何程序都能读回的方式记录拍摄条件。此后标准被多次扩展,因此其中包含了一些任何手机都从未测量过的字段。
实际结果是:EXIF 是一个庞大而稀疏的容器。一张照片有数百个位置,实际填满的只有几十个。空着的位置并不是错误。
真正重要的字段
照片何时拍摄
| 字段 | 含义 |
|---|---|
| DateTimeOriginal | 快门触发的那一刻。人们说的“日期”通常指它。 |
| DateTimeDigitized | 图像写入存储的时间。在手机上基本与上者相同。 |
| OffsetTimeOriginal | 时区偏移,例如 −04:00。没有它,时间戳是有歧义的。 |
| SubsecTimeOriginal | 秒以下的小数,用于连拍排序。 |
照片在哪里拍摄
| 字段 | 含义 |
|---|---|
| GPSLatitude / GPSLongitude | 以度分秒存储的坐标,南北与东西的参考另行记录。 |
| GPSAltitude | 海拔米数,并带一个表示上下的参考字节。 |
| GPSImgDirection | 相机朝向的方位角。想知道拍的是哪一面立面时很有用。 |
| GPSHPositioningError | 设备自己给出的精度估计(米)。很少被读取,却相当有价值。 |
| GPSDateStamp / GPSTimeStamp | 来自卫星的 UTC 时间,独立于设备时钟。 |
最后这一组值得了解。由于 GPS 时间来自卫星而非手机时钟,当设备时间设置错误时,它可以作为一个独立的交叉验证。
用什么拍摄
| 字段 | 含义 |
|---|---|
| Make / Model | 制造商与设备,例如 Apple / iPhone 16 Pro。 |
| LensModel | 多摄手机上具体用的是哪颗镜头,含焦距与光圈。 |
| Software | 写入文件的系统或 App 版本。照片被编辑后会改变。 |
曝光参数
| 字段 | 含义 |
|---|---|
| FNumber | 光圈值。多数手机镜头为固定光圈。 |
| ExposureTime | 快门时长(秒),通常是一个分数。 |
| ISOSpeedRatings | 感光度。以数组形式存储,因此有时显示得很奇怪。 |
| FocalLength | 实际焦距(毫米)。 |
| FocalLenIn35mmFilm | 35mm 等效焦距,也是多数人能够想象的数字。 |
| Flash | 一个位字段,说明闪光灯是否触发以及原因。 |
人们以为会有、实际没有的字段
- 拍摄者姓名。手机不会写入。它属于 IPTC 而非 EXIF,必须专门添加。
- 地点名称。EXIF 只存坐标,从不存地址。要把 35.646 / 139.713 变成一条街道,需要向地图服务查询。
- 照片里有谁、有什么。人脸与主体识别结果保存在图库的数据库中,不在文件里。
- 任何真实性保证。EXIF 中没有任何内容经过签名或验证,每个字段事后都能用普通工具改写。
不装软件怎么读
iPhone
在“照片”中打开一张图片并向上轻扫。你会看到拍摄日期、有坐标时显示的地图,以及包含镜头、光圈、快门、ISO 和尺寸的相机信息行。大多数人需要的字段都在其中。
Mac
预览 ▸ 工具 ▸ 显示检查器,然后切到 ⓘ 标签页。EXIF 与 GPS 子标签会列出原始数值,包括“照片”不显示的字段。
一次看全
Metadata Engraver 会列出它在照片中找到的每一个字段,并允许把其中任意字段绘制到图像上。有用的是后半部分:在检查器里读到的字段,一旦分享就会消失;画进画面里的字段不会。
EXIF 为什么脆弱
两个特性让 EXIF 没有看上去那么可靠。
很容易丢失。任何会重新编码图像的处理都可能丢弃整段数据。社交平台上传、聊天软件和部分编辑器都会这样。哪些途径删除什么,见照片为什么会丢失位置信息。
很容易被改。EXIF 是一种简单的数据结构。免费工具几秒钟就能改写任意字段,包括日期和坐标。如果你把元数据当作证据,这一点至关重要——见带时间戳的照片能证明什么。
这并不意味着 EXIF 毫无价值。它是一种便利,记录了相机“所相信”的内容——通常正确,偶尔错得离谱。
常见问题
每张照片都有 EXIF 吗?
来自相机或手机的照片几乎都有。截屏、软件生成的图像,以及经过会删除元数据的平台的文件,可能几乎没有。没有 EXIF 的照片并没有损坏,只是没有记录任何内容。
ISO 真的以数组形式存储吗?
是的。ISOSpeedRatings 被定义为数组,因为有些相机会报告多个数值。软件若未取出第一个元素就直接输出,会显示成 ISO: ( 46 ) 这样——这是显示层面的缺陷,而不是数据本身奇怪。