指南

JPEG 段与 PNG 块:元数据藏在文件的哪里

看懂 AuditImage「文件结构」表格的每一行。APP1、APP11、COM、tEXt、caBX 分别装什么,偏移和大小说明什么。

JPEG:标记段

JPEG 文件是一串以 FF xx 开头的段。图像数据之前的段都是元数据或解码参数:

标记 名称 内容
FF D8 SOI 文件开始
FF E0 APP0 JFIF 头,分辨率单位和缩略图
FF E1 APP1 EXIF(以 Exif\0\0 开头)或 XMP(以 http://ns.adobe.com/xap/1.0/ 开头)
FF E2 APP2 ICC 色彩配置、MPF 多图(手机景深照片)
FF EB APP11 C2PA 清单(以 JP 开头,内含 jumb 盒子)
FF ED APP13 Photoshop IRB,内含 IPTC
FF EE APP14 Adobe 色彩变换标记
FF FE COM 注释,任意文本
FF DB DQT 量化表
FF C4 DHT 哈夫曼表
FF C0 SOF0 帧头:尺寸、分量
FF DA SOS 扫描开始,之后是压缩数据直到 EOI
FF D9 EOI 文件结束

每个段最大 64 KB。超过的内容会拆成多个同类段:大 XMP 用「扩展 XMP」,大 C2PA 清单拆成多个 APP11 并按序号拼接。AuditImage 的表格里如果看到连续两个 APP11 C2PA,就是这种情况。

PNG:块

PNG 以 8 字节签名开头,之后是一串块,每块有长度、类型、数据、CRC:

类型 内容
IHDR 尺寸、位深、颜色类型
iCCP ICC 色彩配置
pHYs 物理分辨率
eXIf EXIF(2017 年加入标准)
tEXt / iTXt / zTXt 键值文本,XMP、SD 参数、AIGC 标识都在这里
caBX C2PA 清单
IDAT 图像数据,可能多块
IEND 结束

XMP 在 PNG 里是一个 iTXt,关键字 XML:com.adobe.xmp。Stable Diffusion 参数是 tEXt,关键字 parameters。

WebP:RIFF 块

WebP 是 RIFF 容器:VP8 、VP8L 或 VP8X 装图像,EXIF、XMP 、ICCP、C2PA 各一块。有扩展元数据时必须用 VP8X 头。

AuditImage 的「文件结构」表怎么读

  • 段:类型名。含元数据的段用主色加粗。
  • 偏移:段在文件中的字节位置,十六进制。
  • 大小:包含标记和长度字节的整段大小。
  • 占比:相对整个文件的比例条。

几个有用的观察:元数据段通常在图像数据之前;同类段出现多次要注意;一张几十 KB 的图带着 200 KB 的 APP11,说明清单里嵌了缩略图;COM 段有内容时值得展开看。

手动查看

exiftool -v3 photo.jpg           # 逐段列出
exiftool -htmlDump photo.jpg > dump.html