写真の中でEXIFデータはどこに保存されているのか?(JPEG、PNG、HEIC)
EXIFは写真ファイルの中で実際どこに存在するのか?APP1ヘッダー、IFDツリー、バイトオフセット、そしてJPEG、HEIC、PNG、TIFF、WebPがそれぞれどう保存するか。
クイックアンサー: EXIFは別個のサイドカーファイルではなく、画像ファイルそのものの中に保存されます。JPEGでは、ファイルの先頭近くでバイト列0xFFE1から始まるヘッダーブロックであるAPP1マーカーセグメントに存在し、その内部にタグがTIFF/IFDツリー(IFD0、ExifサブIFD、GPS IFD)として配置されています。HEICでは同じタグがコンテナのメタデータボックスに収まり、PNGではeXIfチャンクに存在することができ、TIFFはネイティブに保存します。データが埋め込まれているため、コピーや送信のたびに写真と一緒に移動します。どんな写真でもEXIFビューアにドロップすれば、中に何があるかを確認できます。アップロードは一切ありません。
人々はメタデータがスマートフォン上の隠れたデータベースや、写真の隣の小さなファイルに存在すると思い込むことがよくあります。そうではありません。「いつ、どこで、どのように」は、ファイルの先頭近くの予約された領域で、画像ファイルのバイトそのものに直接書き込まれます。このガイドではその領域がどこにあるか、そして写真を編集または共有したときに何が起きるかを説明します。
要するに:ファイルの中、先頭近くにある
カメラから直接出てきたJPEGを開いて、最初の数百バイトを見てみましょう。画像開始マーカー(0xFFD8)の後、最初に行き当たるものの一つがAPP1マーカーセグメントで、これがEXIFブロック全体を保持しています。圧縮されたピクセルはその後に来ます。つまり典型的なカメラのJPEGはこう並びます:0xFFD8開始マーカー、EXIFを保持する0xFFE1APP1マーカー、オプションのヘッダー(APP2 ICCプロファイル、APP13 IPTC、XMP)、ピクセルデータ、そして0xFFD9終了マーカー。EXIFはピクセルとは別に先頭近くのヘッダーに収まっているため、クリーンなEXIF編集は画像を再圧縮せず、ツールはヘッダー領域だけを書き換えます。
IFDツリー:IFD0、ExifサブIFD、GPS IFD
APP1セグメントは0xFFE1、2バイトの長さ、そして識別子Exif\0\0で始まります。その直後、ペイロードは小さなTIFFヘッダーで始まります。EXIFは内部的には、JPEGの中に埋め込まれた小さなTIFFファイルなのです。そのヘッダーはバイト順(IIリトルエンディアンまたはMMビッグエンディアン)と、タグの最初のディレクトリへのオフセットを宣言します。
そこから、タグは一つの平坦なリストではなく、IFD(Image File Directory、画像ファイルディレクトリ)のツリーとして構成されます。それぞれに役割があります。
- IFD0(「0番目」または「TIFF」ディレクトリ):Make、Model、Software、Orientation、Copyrightといったカメラと画像レベルのフィールド。下のサブディレクトリへ導く二つのポインタタグも保持します。
- ExifサブIFD:撮影時の技術データ。DateTimeOriginal、露出設定、レンズ、ISO、カラースペース。
- GPS IFD:緯度、経度、高度、そしてGPS由来のタイムスタンプ。位置が記録されたときにのみ存在します。
- IFD1(「1番目」ディレクトリ):カメラが生成した埋め込みサムネイル。
リーダーはツリーを辿ります。TIFFヘッダーから始め、IFD0へジャンプし、撮影設定のためにExifポインタを辿り、位置のためにGPSポインタを辿ります。私たちのEXIFビューアはまさにこれを行い、各ディレクトリをそれぞれの表にレイアウトします。EXIFタグリファレンスは各フィールドの完全な辞書です。4バイトに収まる値はタグエントリ内にインラインで収まり、GPS座標のような大きい値はセグメント内の別の場所に保存され、エントリはそれらへのバイトオフセットを保持します。
他のフォーマットが同じタグをどう保存するか
EXIFのタグはフォーマット間でおおむね同じです。異なるのは、タグが収められるコンテナです。
- JPEG / JPG:上で説明したAPP1マーカーセグメント。
- TIFF:EXIFをネイティブに保存します。TIFFファイルはIFDの構造体そのものなので、EXIFは後付けではなく、基本フォーマットの一部です。JPEGのEXIFはこのTIFFレイアウトを借りたコピーです。
- HEIC:iOS 11以降のiPhoneのデフォルト。そのHEIFコンテナは入れ子の「ボックス」から構築され、EXIFタグはJPEGスタイルのマーカーではなくアイテムメタデータボックスに存在します。同じタグ、異なる棚です。
- PNG:専用の
eXIfチャンクにEXIFを保持できます。よりシンプルなツールは代わりにtEXtやiTXtテキストチャンクを使うことがあります。Web書き出しの多くのPNGはまったく持っていません。 - WebP:RIFFコンテナ内の
EXIFチャンクにEXIFを保存します。
タグリファレンスはフォーマットごとの編集上の注意点を詳しく扱っています。
「埋め込み」が重要な理由:メタデータはファイルと共に移動する
EXIFはファイルの中に存在するため、ファイルが行くところどこへでも写真について回ります。JPEGをUSBメモリにコピーしても、メールに添付しても、共有フォルダにドロップしても、GPS座標と撮影時刻はついてきます。これこそメタデータが証拠としてはとても有用で、プライバシーにはとても危険な理由です。証拠も漏洩も、焼き込まれているのです。
これはまた、EXIFの削除が一行の削除ではない理由も説明します。タグはファイルのヘッダー構造に織り込まれているので、それらを剥がすにはその領域なしでファイルを書き換えることを意味します。私たちのEXIF除去ツールはこれをブラウザ内で行います。
編集、スクリーンショット、アップロードしたときに何が起きるか
EXIFはファイルの一部なので、何が残るかはファイルが再エンコードされるかどうかに左右されます。
- コピー、移動、リネーム:バイトは変わらないので、EXIFは保持されます。
- クロップ、回転、軽い編集:ほとんどのエディタはブロックを保持し、寸法と向きのタグだけを更新します。書き換えるものもあるので、後でビューアで確認してください。
- スクリーンショット:スクリーンショットは独自の最小限のEXIFを持つまったく新しい画像であり、元画像のカメラやGPSのデータは持ちません。実質的にメタデータの消去です。
- SNSプラットフォームへのアップロード:Instagram、Facebook、X、WhatsAppは再エンコードによりアップロード時にEXIFを剥がします。メール、Dropbox、AirDropといったファイル共有ツールは保持します。
EXIFが何を記録し、なぜ人々が確認するかという全体像については、EXIFデータとはを参照してください。
FAQ
EXIFは写真の隣の別ファイルに保存されますか? いいえ、画像ファイルそのものの中に埋め込まれています。(一部のプロのRAWワークフローは.xmpサイドカーを使いますが、JPEG、HEIC、PNG、TIFFの標準的なEXIFは画像の中に存在します。)
APP1ブロックとIFDの違いは何ですか? APP1はEXIFを保持するJPEGのスロットです。IFD(IFD0、ExifサブIFD、GPS IFD)はそのスロットの中のディレクトリツリーです。
まとめ
EXIFは隠れたアプリのデータベースやサイドカーファイルに保管されているのではありません。画像に埋め込まれています。JPEGではそれはTIFF/IFDツリー(IFD0、ExifサブIFD、GPS IFD)として構造化された、先頭近くのAPP1マーカーセグメントを意味します。HEIC、PNG、WebP、TIFFは同じタグをそれぞれのコンテナに保存します。焼き込まれているため、メタデータはすべてのコピーと共に移動します。
写真のメタデータがどこに存在するかを見るには:EXIFビューア。共有前に剥がすには:EXIF除去ツール。すべてのタグの意味については:EXIFタグリファレンス。すべてブラウザ内で動作し、アップロードは一切ありません。
ツールを試す
ブラウザで今すぐ写真にスタンプを入れる、もしくはiOSアプリで GPSと原子時計の時刻を撮影と同時に記録できます。