EXIF 元数据深度指南:图片信息解析、相机参数与隐私保护

EXIF 标准:图片的数字身份证

EXIF(Exchangeable Image File Format,可交换图像文件格式)是嵌入在图片文件中的元数据标准,由日本电子工业振兴协会(JEITA)于 1998 年制定。它记录了照片从拍摄到存储的完整上下文信息——相机型号、镜头参数、拍摄设置、GPS 位置、时间戳等,相当于图片的”数字身份证”。

配套工具:EXIF 信息查看器

为什么 EXIF 如此重要

EXIF 元数据在三个维度具有不可替代的价值:

  1. 摄影技术分析:光圈、快门、ISO、焦距等参数帮助摄影师复盘拍摄决策,理解好照片的技术基础
  2. 数字取证与版权:相机序列号、拍摄时间戳是图片真实性的证据链,版权信息支持作品确权
  3. 位置与时间回溯:GPS 坐标和原始时间戳记录了照片的真实拍摄时空,不可被文件重命名篡改

JPEG 文件结构与 EXIF 嵌入位置

理解 EXIF 的前提是了解 JPEG 文件的二进制结构。JPEG 文件由一系列”段”(Segment)组成,每段以 0xFF 标记字节开头:

标记名称作用
FFD8SOI图片起始标识
FFE0APP0JFIF 标识段
FFE1APP1EXIF 数据段
FFDBDQT量化表
FFC0SOF0帧起始(含图片尺寸)
FFC4DHT霍夫曼表
FFDASOS扫描数据起始
FFD9EOI图片结束标识

EXIF 数据嵌入在 APP1 段(标记 FFE1)中。当相机或手机保存 JPEG 时,拍摄参数作为 EXIF 数据写入 APP1 段,紧随 SOI 标记之后。这也是为什么 EXIF 解析只需读取文件头部——APP1 段位于文件最前面。

TIFF 头:EXIF 的数据容器

APP1 段内部采用 TIFF 格式存储数据。TIFF 头的结构如下:

字节偏移  长度  说明
0        2    字节序标识:4D4D=大端序(Big Endian),4949=小端序(Little Endian)
2        2    TIFF 魔数:002A(42)
4        4    第一个 IFD 的偏移量

字节序标识让解析器知道如何正确读取多字节数值——不同相机厂商可能使用不同字节序。TIFF 魔数 42 是格式验证的标识。

IFD:标签的目录结构

EXIF 数据的核心组织单位是 IFD(Image File Directory,图像文件目录)。每个 IFD 是一个标签数组,结构为:

  • 2 字节:标签数量
  • 每个标签 12 字节:标签 ID(2) + 数据类型(2) + 数据数量(4) + 数据值/偏移量(4)
  • 4 字节:下一个 IFD 的偏移量(0 表示无后续 IFD)

标签的数据类型决定了如何解读值/偏移量字段:

类型 ID类型名称字节长度典型用途
1BYTE1枚举值
2ASCII1字符串(以 \0 结尾)
3SHORT2短整数(光圈、ISO)
4LONG4长整数(分辨率)
5RATIONAL8分数(两个 LONG:分子/分母)

当数据超过 4 字节时,值字段存储的是指向实际数据的偏移量。RATIONAL 类型用两个整数表示分数——这是拍摄参数的核心存储方式:快门速度 1/200 存储为分子 1、分母 200;光圈 f/2.8 存储为 28/10。

IFD 层级体系

EXIF 数据由多个 IFD 组成,各司其职:

  • IFD0:基础图片信息(尺寸、方向、分辨率、相机型号)
  • Exif IFD:拍摄参数(光圈、快门、ISO、焦距、闪光灯)
  • GPS IFD:定位信息(经纬度、海拔、时间戳)
  • IFD1:缩略图数据

IFD0 中有一个指针指向 Exif IFD,Exif IFD 中有指针指向 GPS IFD。这种嵌套结构使 EXIF 可以扩展而不破坏向前兼容。

常见拍摄参数标签详解

曝光三要素

标签键名数据类型示例值含义
感光度ISOSHORT400传感器感光灵敏度
光圈值FNumberRATIONAL28/10 → f/2.8镜头通光孔径
快门速度ExposureTimeRATIONAL1/200 → 1/200 秒传感器曝光时长

焦距与对焦

  • FocalLength(焦距):RATIONAL 类型,如 50/1 → 50mm。焦距决定视角范围与透视关系
  • FocalLengthIn35mmFormat(35mm 等效焦距):考虑传感器裁切系数后的等效值。APS-C 画幅 35mm 镜头等效约 52mm

闪光灯状态

Flash 标签是一个位掩码(BITMAP),每一位有不同含义:

  • 第 0 位:是否闪光(0=未闪光,1=已闪光)
  • 第 1-2 位:闪光返回状态
  • 第 3-4 位:闪光模式(0=未知,1=强制闪光,2=强制关闭,3=自动)
  • 第 5-6 位:闪光功能是否存在

本工具简化判断 (value & 1) === 1 来区分闪光灯是否触发。

GPS 坐标处理

支持 GPS 的设备在拍照时记录拍摄位置的经纬度坐标。EXIF 中的 GPS 数据采用度分秒(DMS)格式加方向参考:

GPSLatitudeRef: 'N' (北纬) 或 'S' (南纬)
GPSLatitude: [度, 分, 秒] 三个 RATIONAL 值
GPSLongitudeRef: 'E' (东经) 或 'W' (西经)
GPSLongitude: [度, 分, 秒] 三个 RATIONAL 值
GPSAltitude: 海拔高度(米,RATIONAL)
GPSAltitudeRef: 0=海平面以上,1=海平面以下

DMS 转十进制度数

将度分秒转换为十进制度数的公式:

十进制度数 = 度 + 分/60 + 秒/3600
若为南纬(S)或西经(W),取负值

例如 39°54’15.12” → 39 + 54/60 + 15.12/3600 = 39.9042°。exifr 的 reviveValues 选项自动完成此转换,输出为十进制度数(如 39.9042),本工具据此生成 OpenStreetMap 地图链接。

exifr 库的浏览器端实现

本工具采用 exifr 作为解析引擎,这是 JavaScript 生态中最成熟的 EXIF 解析库。其核心设计:

模块化解析架构

exifr 将解析过程分解为三个独立层:

  1. 文件解析器(FileParser):识别文件格式(JPEG/TIFF/PNG/HEIC),定位元数据段位置
  2. 段解析器(SegmentParser):解析特定元数据标准(EXIF/IPTC/XMP/ICC),各有独立实现
  3. 文件读取器(FileReader):抽象数据读取,支持 Blob/Buffer/Base64/URL 多种输入源

这种分层设计让 exifr 可以按需加载——只需要 EXIF 时不会解析 XMP,减小解析开销。

translateKeys 与 reviveValues

exifr 提供两个关键的格式化选项:

  • translateKeys:将数字标签 ID 翻译为可读名称(如 0x829AExposureTime
  • translateValues:将枚举值翻译为描述文字(如 Flash 的位掩码 → “Off, Did not fire”)
  • reviveValues:将原始数据还原为语义化值(如 GPS 度分秒 → 十进制度数,时间字符串 → Date 对象)

本工具启用全部三个选项,获得最友好的解析结果。

浏览器端的 Blob 读取

exifr 在浏览器中通过 BlobReader 读取文件,支持 FileBlob 输入。关键优化是分块读取——不将整个文件加载到内存,而是按需读取元数据段所在区域(通常在文件前 64KB 内)。这对大图尤其重要:一张 20MB 的 RAW 照片,EXIF 数据可能只在前 10KB,分块读取避免无谓的内存占用。

隐私与安全考量

EXIF 中的隐私风险

EXIF 元数据可能包含敏感信息:

  • GPS 定位:家庭住址、工作地点、常去场所的精确坐标
  • 相机序列号:设备唯一标识,可关联同一设备的多张照片
  • 拍摄时间:精确到秒的时间戳,暴露行为规律

社交平台(微信、微博、QQ)在分享图片时会默认压缩并剥离 EXIF,但直接发送原图(如邮件附件、云盘分享)会保留完整元数据。

浏览器端解析的隐私优势

本工具完全在浏览器本地解析 EXIF,不发送任何数据到服务器:

  1. 图片文件通过 URL.createObjectURL() 加载,不离开浏览器内存
  2. exifr 在 JavaScript 环境中解析,无网络请求
  3. 解析结果仅展示在页面中,用户关闭页面即销毁

这种设计适合处理含敏感信息的照片——即使含私人 GPS 定位的照片,也不会因查看元数据而泄露。

清除 EXIF 保护隐私

如需在分享前清除 EXIF,可使用本站的图片压缩工具——Canvas API 在重新编码时会丢弃原始 EXIF 数据。也可在系统照片应用中关闭位置信息,或使用专业工具按需保留/移除特定标签。

与图片工具链的协同

本工具与现有图片工具形成完整链路:

典型场景:先用 EXIF 查看器检查照片的拍摄参数与隐私信息,再用图片压缩工具优化体积并清除敏感元数据,最后用 Base64 工具嵌入网页或文档。