ずっと取りためているデジタル写真が2万枚くらいあるのですが、そのうちのある程度のものを、会社の先輩にゆずってもらったLibrettoに転送して、Librettoをデジタルフォトフレームにしています。
ですが、単純にコピーしておしまいと言うわけではなく、以下のような制約があります。
- HDD容量が少ないので全部なんて到底入らない(全部で30GB程度ある)
- 画面サイズが640×480しかない
- 色数が254色しかない
なので、取りためてある写真を全部バッチ処理でリサイズ&減色したうえで転送したいのですが、これを自動的に行うプログラムがなかなか見つからなくて困っていました。つど手動でやるのも大変ですし・・・。
で、ImageMagickを使えばこれが一発でできてしまって感激です。物凄く高機能なんですね、ImageMagickって・・・。
実際にはPowerShellからImagemagicを呼び出してファイルを処理させてみました。こんな感じで。
cd z:\picture
$dirlist = dir | Where-Object { $_.gettype().Name.ToString() -eq "DirectoryInfo" }
foreach($dir in $dirlist) {
cd $dir
convert *.jpg -resize 640x480 -colors 256 ("small_" + $dir.Name + "_%03d.jpg")
move small_*.jpg "z:\data\My Dropbox\small"
cd ..
}
そうしてみるとそれなりにうまく行ったのですが、フォルダ内に大量のファイルがある関係なのか、4000枚くらい処理したところでメモリが足りないということで処理がとまってしまいました。
私は一月ごとにフォルダを変更していて、月に一度程度の処理ならこのままでも問題なさそうですが、せっかくなので1ファイルずつ処理を変更するようにロジックを変更してみようかと考え中。結果はまた日記で。