特定のディレクトリ以下にある大量のjpgファイルをサムネイル化したいですが
うまくいきません。。(:o:)
画像は300ほどのサブディレクトリに別れて保存されています。
単純な縮小であれば以下のようなコマンドで変換できたのですが、
find . -name "*.jpg" -exec mogrify -quality 80 -thumbnail 100x100 {} \;
縦長、横長、サイズ等がバラバラな画像から、正方形のサムネイルを作成したいです。
短い方の辺の長さで長い方の辺を中心から正方形に切り抜きそれを縮小したいと思っています。
同じ内容の質問で
http://q.hatena.ne.jp/1232514757
こちらに回答があったのですが
getimagesize
などが、PHPでしか使えないようでうまくいきませんでした。
上記の内容を1行のコマンドもしくは以下のような形で呼び出せるシェルスクリプトにするには
find . -name "*.jpg" -exec ./resize.sh {} \;
どうすればよいでしょうか?
環境はCentOS5.6でコマンドラインでの接続は出来ますが、XWindowなどは使えません。
少し急いでおりますので1000ptを設定させて頂きました。
よろしくお願い致します。
シェルスクリプトの例も書いておきます。
resize.sh というファイル名で保存し、実行権限を与えれば、
上で書かれているように、
find . -name "*.jpg" -exec ./resize.sh {} \;
で動くはずです。
(ただこのサムネイルの作り方で本当によいのでしょうか。
細長い画像の場合、よく分からないサムネイルになりますよね)
#! /bin/sh file=$1 eval $(identify -format 'width=%w; height=%h' $file) if [ $width -lt $height ]; then size='100' else size='x100' fi mogrify -thumbnail $size -gravity center -extent 100x100 $file
mogrifyのオプションを確認してませんが、一般に同じディレクトリにあるファイルに同じ操作をスクリプト処理するのであれば、以下の通り。
for i in *.jpg;do mogrify $i -quality 80 -thumbnail 100x100 {};done
一応こちらでも試してみますが。