2012年6月10日日曜日

画像サイズの変更を自動化する

最近画像の編集を大量に行うようになったので、スクリプトを書いて自動で圧縮できるようにしてみた。

まずディレクトリ内に jpg ファイルがいくつあるかを調べたいので次のコマンドを実行する。

$ ls -al *.jpg | grep -c '^-'

ls -al *.jpg でディレクトリ内の jpgファイルをロング形式で表示すると、ファイルには先頭に ハイフン- がくるのでその数を grep -c でカウントする。このコマンドで得られた数だけ画像を圧縮する。

次に、圧縮する画像を選ぶには awk を使う。

$ ls *.jpg | perl -pe 's/\n/ /g' | awk '{print $i}'

ls で出力したファイル名のリストを perl で一行のファイルにして awk でi番目のファイルを選び出す。iには1から先ほど数えたファイル数が代入されることになる。read line を使えば一行にする必要もなさそうだが今回は perl を使い、毎回lsを実行する。

サイズを変更するには convert -resize を使う。例えば、hoge.jpgという画像ファイルを横1193px 縦795px のhoge$i.jpg に変換したいときは、

$ convert -resize 1193x795 hoge.jpg hoge$i.jpg

とする。この時数字と数字の間にはアルファベットのx(エックス)を書く。決して×や*ではない。ちなみに、このコマンドでサイズを変更するときは縦横比を変えないで指定したサイズにおさまるような最大のサイズに変更されるらしい。また、convertではサイズの変更だけでなく、形式の変更、回転など色々できる。

以上をまとめると次のようになる。

========================================================
#!/bin/bash

files=`ls -al *.jpg | grep -c '^-'`
for i in $(seq 1 $files)
do
name=`ls *.jpg | perl -pe 's/\n/ /g' | awk -v i=$i '{print $i}'`
convert -resize 1193x795 $name hoge$i.jpg
done
========================================================

今回は例として、jpgを使ったが、JPG、jpegなど convert が扱える形式なら何でもよい。

0 件のコメント:

コメントを投稿