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 | 画像の終了 |
各セグメントは最大64KBを保持します。より大きなペイロードは同じ種類の複数のセグメントに分割されます:大きなXMPは「拡張XMP」を使用し、大きなC2PAマニフェストは複数のAPP11セグメントに分割されシーケンス番号で再アセンブルされます。AuditImageのテーブルで2つの連続するAPP11 C2PA行はまさにこれです。
PNG:チャンク
PNGは8バイトの署名で始まり、長さ、タイプ、データ、CRCを持つ一連のチャンクが続きます:
| タイプ | 内容 |
|---|---|
| IHDR | 寸法、ビット深度、カラータイプ |
| iCCP | ICCプロファイル |
| pHYs | 物理的解像度 |
| eXIf | EXIF(2017年に標準に追加) |
| tEXt / iTXt / zTXt | キー/値テキスト:XMP、SDパラメータ、AIGC暗黙ラベルがここに配置 |
| caBX | C2PAマニフェスト |
| IDAT | 画像データ。複数のチャンクの場合もあり |
| IEND | 終了 |
PNGのXMPはXML:com.adobe.xmpをキーワードとするiTXtです。Stable DiffusionパラメータはparametersをキーワードとするtEXtです。
WebP:RIFFチャンク
WebPはRIFFコンテナです:VP8 、VP8L、VP8Xが画像を保持し、EXIF、XMP 、ICCP、C2PAがそれぞれ1つのチャンクです。拡張メタデータにはVP8Xヘッダーが必要です。
AuditImageの「ファイル構造」テーブルの読み方
- セグメント:タイプ名。メタデータを含むセグメントはアクセントカラーで太字表示。
- オフセット:ファイル内のバイト位置(16進数)。
- サイズ:マーカーと長さバイトを含むセグメント全体。
- シェア:ファイル全体に対する相対的なバー。
役立つ観察事項:メタデータセグメントは通常画像データの前に配置。同じ種類の繰り返しセグメントは確認の価値あり。数10KBの画像が200KBのAPP11を保持している場合、マニフェストにサムネイルが埋め込まれている。内容のあるCOMセグメントは展開する価値あり。
手動確認
exiftool -v3 photo.jpg # セグメントごと
exiftool -htmlDump photo.jpg > dump.html