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