画質を落とさずにメタデータを消す:再エンコードは削除ではない理由
写真のメタデータを消す方法は二つあります。一つは、データのブロックを取り出して、画像はそのまま残すこと。もう一つは、写真を開き、描き直して、保存し直すことです。途中でメタデータは失われますが、画像も変わってしまいます。そしてときには、メタデータさえ失われません。
再エンコードとは
JPEG や HEIC は画像を非可逆圧縮で保存します。保存するときに、目にはほとんどわからない情報を捨てるのです。誰かが写真を開いてもう一度保存すると、その圧縮が前の圧縮の上にもう一度かかり、画像はさらに少し失われます。一度なら見分けにくいですが、何度も重なると、ブロック状のノイズ、汚れた輪郭、色あせが現れます。
多くのツールはまさにこの方法でメタデータを消します。プログラムするのがいちばん簡単だからです。写真をキャンバスに描いて、もう一度書き出す。それで動きはしますが、代償がないわけではありません。
測定したこと
GPS 付きの 3024 × 4032 のテスト写真を用意し、三通りの方法で処理しました。割合は写真によって変わります。細部の多い写真は、なめらかな私たちの写真より多くを失います。ですから大事なのは、何が変わり、何が変わらないかです。
- ブラウザで描き直す、多くのシンプルなサイトがしている方法:ピクセルの 1.8% が変わり、ファイルは 925 kB から 742 kB になりました。GPS は消えましたが、再エンコードされています。
- macOS の画像ツール(
sips)で品質 85 で保存し直す:ピクセルの 16.8% が変わり、しかも GPS は残りました。再エンコードは削除ではありません。 - KillEXIF で:ピクセルは一つも変わりませんでした。画像データはバイト単位で同じで、GPS は消えていました。
- 品質 90 で 10 回続けて保存:元との差は保存のたびに大きくなりました。だから再エンコードしないことが大事なのです。写真はそうしたツールを通るたびに、少しずつ失われていきます。
ツールが再エンコードしているかを見分ける方法
測定しなくてもわかる手がかりがあります。
- サイズが大きく変わる。 メタデータを消して減るのは数キロバイトで、サムネイルがあればもう少し減ることもあります。3 MB の写真が 2 MB になって出てきたら、再圧縮されています。
- 保存するときに「品質」を選ばせる。 品質があるなら、圧縮があります。
- 形式が変わる:HEIC を入れて JPEG が出てきたら、画像全体がもう一度エンコードされています。
- 画像を処理するのと同じくらい時間がかかる:メタデータのブロックを取り除くのはほぼ一瞬ですが、大きな写真を再圧縮するのはそうではありません。
KillEXIF がすること
KillEXIF は画像に触れずにメタデータを消します。ファイルの中のデータのブロックを見つけて取り出し、残りはそのままコピーします。そのあと処理後のファイルを読み直して、消すべきものが消えたかを確かめ、その結果を伝えます。「検証済み:機微な情報は残っていません」。そして、ファイルを壊さずには消せないものがあれば、再圧縮する代わりにそのことを説明します。
だから処理後の写真は元とほぼ同じ容量で、何度処理しても何も失われません。動画も同じです。メタデータは消え、動画がエンコードし直されることはありません。