JPGファイルからEXIFやGPSなどの付加情報を取り除きたいことがある。

今までは専用のツールを使っていたが、ふとImageMagickでできるのでは?と調べたら、案の定できることがわかったのでメモ。

$ convert -strip 入力ファイル 出力ファイル

このように-stripオプションを使えるだけでよい。入力と出力を同じファイル名にすれば上書きになるが、簡単に

$ mogrify -strip 入力ファイル

としても上書きできる。

さらにEmacsと組合せることで、GUIなソフト並に手軽に、EXIF情報の掃除ができる。

要するに、dired-do-shell-commandを使うだけで、別にImageMagickに限った話ではない。Emacsユーザーにはお馴染の話だろうが、やっぱりEmacsは最高だと思ったので、あえて説明しておく。

Diredバッファを開き、変換したいファイルを選択しておく。

  /Users/bird/images:
  total used in directory 28960 available 6194084
  drwxr-xr-x    9 bird  staff      306  5 13 09:42 .
  drwxr-xr-x@ 164 bird  staff     5576  5 13 09:39 ..
* -rw-r--r--@   1 bird  staff  2272263  5  5 17:27 image1.jpg
* -rw-r--r--    1 bird  staff  1849400  5  5 17:27 image2.jpg
  -rw-r--r--    1 bird  staff  2443233  5  5 17:27 image3.jpg

!キー押下でdired-do-shell-commandを実行すると、次のようなプロンプトが表示されるはず。

! on * [2 files]: 

ここで、次のようなコマンドを入力する。

convert -strip ? new-`?`

` ? ? `がファイル名に置き換わり、この例では二つのコマンドがそれぞれ実行される。

convert -strip image1.jpg new-image1.jpg
convert -strip image2.jpg new-image2.jpg	

これでEXIF等がないJPGファイルが得られる。Diredを使えば、ファイル名を指定する手間が減るので便利だ。

もし上書きでいいのであれば、mogrifyを使って

mogrify -strip

とすれば、さらに手軽。しかし、その分、誤ってオリジナルを消してしまうリスクが増えるので、こっちは覚えないほうがいいかも。

ちなみに、 ? `?`の違いは、 ? が前後にスペースが必要なのに対して、`?`はスペースが使えない場所で使う。