>_devtools-hub
画像プライバシーメタデータ

写真を公開する前に位置情報を消す手順 — EXIF・XMP・向きの落とし穴

写真に記録された位置情報や撮影情報を、公開する前に確かめて取り除く手順をまとめます。EXIF の外にある XMP や PNG の塊、画像の後ろに付いたデータ、消したときに写真が横倒しになる向きの問題、サイトのアップロード処理で消すときの注意までを、実際に試した結果とともに扱います。

スマートフォンで撮った写真には、撮影した場所の座標、日時、機種などが画像とは別に記録されています。ブログやフリマ、制作実績のページに写真を載せるとき、これがそのまま残っていると、自宅や職場の位置まで一緒に公開することになります。消し方を調べると「EXIFを削除する」という説明がよく出てきますが、試してみると、それだけでは位置情報が残る場合と、消したことで写真が横倒しになる場合がありました。この記事では、位置情報と撮影日時と機種を入れたテスト用の画像を作り、確かめる・取り除く・取り除けたかを読み直す、の3段で実際に通した手順を紹介します。

1. まず写真に何が入っているかを見る

最初に、公開しようとしている写真に何が記録されているかを確かめます。EXIF Viewer に JPEG をドロップすると、撮影日時、カメラのメーカーと機種、位置の座標が表に並びます。座標があれば地図へのリンクも出るので、どこが記録されているかがすぐに分かります。テスト用の画像では、東京タワー付近の座標、撮影日時、機種名がそのまま読み取れました。ここで座標が出なければ安心、と考えたくなりますが、それはまだ早いです。EXIF は写真のメタデータの一部でしかなく、位置情報はほかの場所にも入るからです。

この手順で使うツール

EXIF Viewer

画像のEXIFメタデータを表示 — 撮影情報・GPS座標・解像度

2. EXIF の外にも位置情報は入る

位置情報が入る場所は EXIF だけではありません。画像編集ソフトで書き出した JPEG には、XMP という別の形式で同じ座標が書かれていることがあります。PNG では eXIf や iTXt という塊に入ります。機種や撮り方によっては、画像の後ろに2枚目の画像や短い動画が付いていることがあり、その中に別の EXIF が入っている場合もあります。テスト用に、XMP にだけ座標を入れた JPEG と、eXIf に座標を入れた PNG を作って EXIF の表だけを読む方法で確かめたところ、どちらも「EXIFデータが見つかりませんでした」と表示されました。座標は入ったままです。EXIF Viewer は、こうした EXIF の外にあるメタデータも警告として出すようにしてあります。ファイルの中にどんな塊がいくつあるかをまとめて見たい場合は、Image Metadata Remover に読み込むと、塊ごとに位置情報を含むかどうかの印が付いた一覧が出ます。対応しているのは JPEG と PNG で、HEIC や WebP は読めません。iPhone の写真が HEIC のままの場合は、先に JPEG で書き出してから読み込んでください。

この手順で使うツール

Image Metadata Remover

写真の位置情報・撮影情報を、画質を落とさずに取り除く — JPEG / PNG

3. 画質を落とさずに取り除く

取り除く方法は大きく2つあります。1つは画像をいったん表示して保存し直す方法で、メタデータは消えますが、JPEG は圧縮をやり直すので画質が少し落ち、形式が変わる変換もあります。もう1つは、ファイルの構造を読んでメタデータの塊だけを抜き、画素のデータには触れない方法です。Image Metadata Remover は後者で、EXIF・XMP・IPTC・コメント・画像の後ろに付いたデータを取り除きます。テスト用の画像で、取り除く前と後をそれぞれ展開して画素を比べたところ、1つも違いはありませんでした。ファイルの大きさは、取り除いた塊のぶんだけ小さくなります。一方、ICC プロファイルのように色の解釈に使う塊は、個人の情報を含まないので既定で残します。

この手順で使うツール

Image Metadata Remover

写真の位置情報・撮影情報を、画質を落とさずに取り除く — JPEG / PNG

4. 向きまで消すと、縦の写真が横倒しになる

縦に構えて撮った写真の多くは、画素そのものは横長のまま保存され、EXIF の Orientation(向き)に「90度回転して表示する」と書かれています。表示する側がこの値を見て回転させているので、EXIF を丸ごと消すと向きの情報も消え、縦の写真が横倒しで表示されます。テスト用の画像(横400×縦200の画素に、向き6=90度回転を指定したもの)で試すと、向きを残した場合は横200×縦400の縦長で、向きまで消した場合は横400×縦200の横長のまま表示されました。Image Metadata Remover は既定で、向きしか持たない最小の EXIF を入れ直します。取り除いた後の一覧では「EXIF(向きだけを入れ直したもの)」として残り、元の画像と取り除いた後の画像が並んで表示されるので、2枚が同じ向きになっていることを目で確かめられます。

この手順で使うツール

Image Metadata Remover

写真の位置情報・撮影情報を、画質を落とさずに取り除く — JPEG / PNG

5. 取り除いた後のファイルを読み直す

消したつもりでも、別の塊に残っていては意味がありません。取り除いた後のファイルは、必ずもう一度最初から読み直して確かめます。Image Metadata Remover は保存する前に、取り除いた後のファイルを読み直した結果を表示し、位置情報を含む塊が0個になっているか、残っているのが向きと色のプロファイルだけかを示します。画面に表示された結果は、保存する前の手元のデータを読んだものです。念のため、保存したファイルそのものを EXIF Viewer に入れ直しておくと、実際に公開するファイルで確かめたことになります。表には何も出ず、EXIF の外のメタデータについての警告も出なければ取り除けています。なお EXIF Viewer の警告は Image Metadata Remover と同じ読み取りの仕組みを使っているので、別の道具でのダブルチェックではなく、あくまで保存したファイルの読み直しです。

この手順で使うツール

EXIF Viewer

画像のEXIFメタデータを表示 — 撮影情報・GPS座標・解像度

6. サイトのアップロード処理で消すときの注意

自分でサイトやアプリを作っていて、利用者がアップロードした画像のメタデータをサーバー側で消したい場合も、同じ落とし穴があります。Node.js でよく使われる画像処理ライブラリ sharp(0.35.5 で確認)は、既定の設定で保存し直すとメタデータをすべて捨てます。位置情報は消えますが、向きも一緒に消えるため、縦の写真は横倒しのまま保存されました。保存の前に rotate() を引数なしで呼ぶと、向きの値に従って画素そのものを回転させてから保存するので、メタデータが消えても正しい向きで表示されます。ブラウザ側で canvas に描いてから保存する方法でも、メタデータは消え、向きは描くときに反映されていました。ただし、どちらも圧縮をやり直すので画質は少し落ちます。アップロード時に縮小や形式の変換をするなら、そのついでに消すのが手間の少ない方法です。

まとめ

写真の位置情報は「中身を見る → EXIF の外も含めて塊を一覧にする → 画素に触れずに取り除く → 向きだけは残す → 取り除いた後を読み直す」の順で消すと、残し忘れも横倒しも防げます。特に「EXIF の表だけ見ると、XMP や PNG に残った位置情報を見落とす」「EXIF を丸ごと消すと向きも消えて縦の写真が横倒しになる」「画像処理ライブラリの既定の保存でも同じことが起きる」の3点は、知らないと消したつもりのまま公開してしまいます。

このツールで試す

Image Metadata Remover

写真の位置情報・撮影情報を、画質を落とさずに取り除く — JPEG / PNG

画像メタデータプライバシー

使ってみる →

EXIF Viewer

画像のEXIFメタデータを表示 — 撮影情報・GPS座標・解像度

画像開発者向けメタデータ

使ってみる →

BOOTH

関連ガイド