画像の一括縮小
要件
- フォルダ内の jpeg 画像をすべて 1280x1024 に収まる大きさに縮小する
- なるべくきれい
はじめは Java で書こうとして以下の情報を見つけました。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=20241&forum=12&start=16
「Javaでサムネイル作成」に注目すると、やっていることは
の2つ。
それぞれ自分でもやってみましたが、自分が用意した画像と環境(Java SE 6)では前者の方がきれいでした。「画像の縮小について」にあるように、縮小の場合は「RenderingHints.VALUE_INTERPOLATION_BILINEAR
」が効いてないようです。
前者は(遅いけど)十分きれいなのですが、IrfanView で縮小表示した結果には及びませんでした。IrfanView では「Lanczos」というアルゴリズムが使われているようです。
どうやら「理論上最高品質らしい」ようなのでそれを Java で … と思ったんですが、現在はまだ標準では無いみたいです。そういうライブラリも見つけられませんでした。
というわけで今回は Lanczos3 アルゴリズムが使える nconvert というフリーソフト(商用は有料)を使いました。
以下は「大きさを 1280x1024、縦横比を固定、リサイズアルゴリズムに lanczos3、jpeg画像で圧縮率を90%、出力ファイルを"r_(元のファイル名).jpg"でカレントフォルダ内の全ての".jpg"ファイルを対象にしてリサイズ」を実行します。
nconvert -resize 1280px 1024px -ratio -rtype lanczos -out jpeg -q 90 -o r_%.jpg *.jpg
コマンドラインオプションは以下を参考にしました。
結果はもちろんきれいでしかも速い。他にもいろいろな変換が可能で、かなり高機能なソフトだと思いました。
- -
b:id:brazil さんに ImageMagick を教えて頂きました。ありがとうございます。
上と同じ事をやるには
convert -resize 1280x1024 -filter Lanczos -quality 90 XXXX.jpg r_XXXX.jpg
とします*1。
これだと「1280x1024」にリサイズされそうですが、ImageMagickでこれは最大値指定になります。
「1280x1024」にリサイズするには
convert -resize 1280x1024! -filter Lanczos -quality 90 XXXX.jpg r_XXXX.jpg
のように、大きさの後に"!" を付けます。