Exifからサムネイルを削除してフォトライフの容量節約

デジカメなどで写真を撮ると,Exif情報としてカメラ機種や撮影日,シャッター速度,絞り,焦点距離などの情報がjpeg画像に埋め込まれます.はてなフォトライフなんかは,このExif情報を使うことで上記のような情報について表示や検索ができます.
このExif情報には,サムネイル画像も記録することができてデジカメで撮影するとサムネイルも同時に記録されます.一部の画像ビューアはこのサムネイル画像を用いることでサムネイル表示するものもあります.しかし,はてなフォトライフにアップロードする場合は,容量制限があるのでこのサムネイル画像はあんまり有意なものではなく容量の無駄になってしまいます.
JPG Cleanerを使えば,Exif情報もろとも削除して画質に影響を与えることなくjpeg画像を軽量化してくれます(参照:JPG Cleanerの使い方 - faireal.org).でも,せっかくフォトライフにアップロードするんだからほかのExif情報は残しておきたいものです.
そこで,ExifToolを使ってほかのExif情報は残しつつサムネイル画像だけを削除する方法を紹介します.ExifToolは,コピーや書き換え表示などExif情報をいじくるときに便利です.Perlがインストールされている Windows XP という前提で進めます.ほかの環境の方はてきとうに読み替えてください.
まず,ExifTool by Phil Harveyで,ExifToolをダウンロードしててきとうなフォルダに解凍します.コマンドプロンプトで,画像があるフォルダに移動して次のようにとタイプすると,サムネイル画像のみ削除され軽量化することができます.

perl ExifToolを解凍したフォルダ\exiftool "-ThumbnailImage<=" 処理したいjpeg画像

処理を行うと,オリジナル画像のバックアップが作られますが作りたくない場合は,-overwrite_originalオプションをつけます.
毎回こんなこと打っていたのでは面倒なので,次のremove_thumbnail.batというバッチファイルを作ることにします.

@echo off
perl ExifToolを解凍したフォルダ\exiftool -overwrite_original "-ThumbnailImage<=" %1

このバッチファイルにjpeg画像をドラッグアンドドロップすれば勝手にコマンドを実行してくれます.必ず1個ずつやってね.複数ファイルをドラッグアンドドロップしたときの処理をバッチファイルに書こうと思ったら引用符付きの引数の処理が面倒なのであきらめました.次のバッチファイルで複数ファイルの処理ができます.

@echo off
:file
if "%~1" == "" goto end
perl ExifToolを解凍したフォルダ\exiftool -overwrite_original "-ThumbnailImage<=" %1
shift
goto file
:end

例としての画像を使って比較してみました.この画像にはサムネイルが含まれています.

オリジナル サムネイル削除 JPG Cleaner
48.9KB 40.6KB 38.4KB

このくらいの大きさの画像で約20%も減量できました.もうちょっとでfotolifeの容量がいっぱいになりそうなんて方は使ってみるといいかもしれません.
ほかにも,exiftool -TagsFromFile src.jpg dst.jpgとすればsrc.jpgからdst.jpgにExif情報をコピーできます.いろいろできるので詳しくはexiftool Application Documentationを見てください.
ExifToolの実体はPerlモジュール(search.cpan.org: Phil Harvey / Image-ExifTool)なのでアップロード時に自動的にfotolife側でサムネイルを削除してくれればいいんですけどね.ということで早速アイデアに出してみました.idea:6077