写真に埋まっている位置情報の話
スマホで撮った写真には、写っているもの以外の情報が一緒に入っている。EXIFと呼ばれる領域で、撮った場所の緯度経度もここに入る。
どれくらいの量なのかを数えた。
| 入っているもの | バイト数 |
|---|---|
| 位置情報(緯度・経度・高度) | 56 |
| 撮影日時 | 20 |
| 機種名 | 21 |
| メーカー名 | 15 |
| OSのバージョン | 14 |
| レンズの情報 | 54 |
| 文字と数値の合計 | 180 |
| サムネイル画像 | 2,325 |
位置情報は56バイトしかない。 写真本体が256KBなので、0.02%だ。それだけで、撮影地点が数メートルの精度で分かる。
消してもサイズは減らない
EXIF全体でも2.8KB程度で、写真本体の1.1%にしかならない。つまりEXIFを消すのは、軽くするためではない。情報を消すためだ。
このサイトのツールは、EXIFの領域だけを取り除いて、画像データには一切触らない。実際に試すと、削除後のバイト列はEXIFを入れる前のファイルと完全に一致する。再圧縮しないので、画質も落ちない。
軽くしたいなら別の話で、画像を縮小するか、圧縮をかけ直す必要がある。
EXIFの大半はサムネイル画像
表を見ると、EXIFの中で一番大きいのはサムネイルだ。文字と数値が全部で180バイトなのに、縮小版の画像だけで2,325バイトある。
これは一覧表示を速くするための仕組みで、それ自体は合理的だ。ただ、この縮小版が本体と食い違うことがある。
写真をトリミングしたり、一部を塗りつぶしたりしたあと、編集ツールがEXIFをそのまま引き継ぐと、サムネイルだけが編集前のまま残る。本体では消したはずのものが、縮小版には写っている、という状態になる。
見た目では気づけない。サムネイルは普段目に入らないからだ。
どこで消えて、どこで消えないか
多くのSNSは、アップロードされた画像を投稿用に作り直す過程でEXIFを落とす。なので「SNSに上げたから大丈夫」と思いがちだが、そうでない経路のほうが多い。
- メールに添付して送る
- クラウドストレージの共有リンクで渡す
- チャットで「ファイルとして」送る(画像として送ると圧縮される場合がある)
- 自分のサイトやブログに置く
- フリマアプリや掲示板に出す
こうした経路では、撮ったときのファイルがそのまま相手に届く。自宅で撮った商品の写真に、自宅の座標が付いたまま公開される、ということが起きる。
スクリーンショットには位置情報は入らない。カメラを使っていないからだ。ただし機種名や日時が残ることはある。
消すときの落とし穴:向きの情報
ここが一番の注意点で、EXIFには「この写真は横向きに記録されているので、表示するときは90度回してください」という指示(Orientation)も入っている。
スマホを縦に構えて撮った写真は、実は横向きのまま記録されていて、この指示によって正しい向きで表示されていることが多い。
つまりEXIFを丸ごと消すと、写真が横倒しになることがある。
情報を消したつもりが、見た目まで変わってしまう。これはEXIFを消すツール全般に共通する性質で、消した後は一度開いて向きを確認するほうがいい。
向きがおかしくなっていたら、画像を実際に回転させて保存し直す必要がある。向きの指示に頼らず、画素そのものを回した状態にしておけば、どこで開いても正しく表示される。
まとめ
- 位置情報は56バイト。 小さいが、撮影地点を特定できる
- 消してもサイズは1%程度しか減らない。 軽量化ではなく、情報を消す操作
- EXIFの大半はサムネイル画像。 編集前の縮小版が残ることがある
- SNS以外の経路では消えないことが多い。 メール、共有リンク、直接アップロード
- 消すと写真が横倒しになることがある。 向きの指示もEXIFに入っているため
公開する前に一度消す、という習慣にしておくのが確実だと思う。消して困る情報は、普通の用途ではまず無い。
計測の条件
1200×900のJPEG(品質88、256,393バイト)を用意し、EXIFの各項目を仕様どおりのバイト列として組み立てて大きさを数えた。位置情報は緯度・経度・高度をそれぞれ有理数(分子と分母の組)で表す形式で、合計56バイトになる。サムネイルは160×120・品質70で作ったときの大きさ。