わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

photominifier.sh: 写真を縮小化

これまで,デジカメ撮影したファイルの管理を,次のように行ってきました.

  • スマートフォンで撮影したものは,Dropboxに転送
  • 自作の振り分けスクリプト*1を実行して,DropboxやSDカード(コンパクトデジカメで撮影)のファイルを,PC内の 《あるところ》/年/年月日 ディレクトリにコピー
  • 定期的に外付けドライブを接続して,《あるところ》のディレクトリを《またあるところ》にコピー

なのですが,ここのところ,Dropboxの容量が上限近くになっていました.
ファイルを消したら話は簡単とはいえ,何か月前の写真を見直したりしたいときもあります.
そこで,Dropboxに置いた写真を縮小化し,サイズダウンを図ることにしました.
要領は次のとおりです.ディレクトリ DIR1 の各 JPG ファイルについて,次の条件をすべて満たすとき,縮小化します.

  • ファイル名が small_ で始まらない
  • 撮影日が2か月以上過去
  • ディレクトリ DIR2/yyyy/yyyymmdd に,ファイルがあり,そのサイズは縮小対象ファイルと同一*2

撮影日は,EXIF の DateTimeOriginal タグをもとに判定します.EXIFがないファイルは,縮小化の対象外となります.
縮小にあたっては,拡大率25%,品質90%とし,ファイル名の先頭に small_ をつけます.縮小化したら,(DIR1にある)元ファイルを削除します.
プログラムはGistに置いておきます.Rubyで書こうかシェルスクリプトにしようか迷った末に,後者,具体的にはzshスクリプトとしました.
Cygwinで実行し動作確認しています.ImageMagick(convert,identifyの各コマンド)も必要です.
「date -d '-2 month'」で2か月前の日付を求めたり,「identify -verbose」でEXIF情報を求めたり,findの-inameオプションでファイル名の大小を無視したり,forループでcontinueを使ったりと,そのつど調べて学んだことを,取り入れました.
それでファイルサイズですが,スマートフォンごとにディレクトリを別にしていまして,実行することで,合わせて1GBほど削減することができました.一覧性・視認性は問題ありません.
うまくいった記念に,「何か月前の写真」をひとつ:


いくつか補足です.

  • convertコマンドで,JPEGからJPEGへの変換をしても,EXIF情報は保持されています.
  • 当ブログで載せる写真では,EXIF情報を取り除いています.IrfanViewで縮小させてから,「名前を付けて保存」を選び,オプションで「EXIF情報の保存」にチェックがないのを確認してから,保存のボタンを押しています.

(最終更新:2014-12-07 早朝)

*1:Rubyで作成,非公開.

*2:DIR2が,《またあるところ》に対応します.DIR1は,縮小化対象ディレクトリです.上記の「あるところ」に対応するディレクトリは,処理において参照しません.