web-dev-qa-db-ja.com

コマンドラインで画像のサイズを最大サイズに変更します

私は非常に大きな画像の非常に大きなコレクションを持っており、画像が180pxの最大-最小幅(あなたが理解する)にサイズ変更されるサムネイルギャラリーを作成したいと思います。

例:画像が2400x1800の場合、240x180にサイズ変更されます。1600x1800の場合、180x202にサイズ変更されます。

はっきりしていますか?画像の最小サイズは、幅または高さに関係なく、正確に180にする必要があります。

これはコマンドラインでどのように可能ですか?各ファイルのサイズを特定のサイズに変更する方法は知っていますが、それらの異なるサイズではありません。

5
ranisalt

まさにそのような最小サイズオプションを持つImageMagickのconvertを使用するのはどうですか? 画像ジオメトリ オプションを参照してください!

スニペットのコピーと貼り付け(bash構文)-サイズ指定の後の^に注意してください。

for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize 180x180^ "$file" "th_$file"
   echo done
done

さらに、結果のファイルを中心の周りの2次形状にトリミングする場合は、このスクリプトを使用できます。最初の行のSIZEパラメーターは、サムネイルの最終的なサイズを指定します(驚き、驚き)。

SIZE=180
for file in *.jpg; do
   echo -n Converting ${file}...
   convert -resize ${SIZE}x${SIZE}^ "$file" temp.png
   convert -crop $(identify temp.png | awk -F'[ x]' -v SIZE=$SIZE '{ printf "%ux%u+%u+%u", SIZE, SIZE, ($3-SIZE)/2, ($4-SIZE)/2 }') temp.png "th_$file"
   echo done
done
rm temp.png

スクリプトはサムネイルに対して2つのコマンド(identifyconvert -crop)を実行するため、あまり最適化されていません。でもサムネイルが小さいのでスピードは妥当だと思います。

5
mpy