ImageMagicで画像変換(後編)

先日の ImageMagicで画像変換 の後編です。
前回が準備の説明で長くなってしまったので、今回はサンプルプログラムと実行結果を交えてサクッといきます。


前回の記事 で ImageMagick が実行できる環境が整ったら以下のプログラムが実行できるはず。

手軽に画像変換・リサイズが行えるプログラム。
初期設定ではプログラムと同階層のjpgファイルを長辺が300pxよりも大きさがある場合は300pxまで縮小してjpg-90%で書き出す処理をします。

以前に作った 書き出しjsx みたいなもの。
Photoshopの起動が必要ない分、お手軽な感じがするよね。

GitHub にもファイル置いてあるのでダウンロードして実行しても良いかと。

ソース

#!/bin/sh

# プログラムの階層パスを取得
cwd=`dirname "${0}"`

# 現在のディレクトリをスタックに保存してディレクトリを移動 (pushd <--> popd)
pushd ${cwd}

# ディレクトリが無ければ作成
dir="@export"; [ ! -e $dir ] && mkdir -p $dir

# 読み込むファイル拡張子(対象ファイルに合わせて切り替え)
incExt=".jpg|.jpeg"
#incExt=".png"
#incExt=".gif"
#incExt=".psd"

# 書き出すファイル拡張子 (jpg, gif, png/png8/png24)
outExt="jpg"

# 変更サイズ (長辺をこのサイズにする/px) 「xxx」の場合はサイズ変換無し
fileSize="1000"

# Exif情報に対する処理(-auto-orient -strip = 画像の向き情報以外削除)
exif=""
#exif="-strip"
#exif="-auto-orient -strip"

# colors (1~256)
colVal="256"

# depth
depVal="8"

# quality
quaVal="90"
#[jpg|mpeg] (1~100)
#[png]	10の位が圧縮率 (0=無圧縮 ~ 9=最高圧縮)
#		1の位が圧縮方式 (0=none、 1=sub、 2=up、 3=average、 4=Paeth)
#		The default PNG "quality" is 75

# 特定条件のファイル処理 / 拡張子を含んだファイルのみ処理(小文字・大文字を区別しない)
for line in `ls -F | grep -i -E "${incExt}"`
do

	# 「.psd」対しては「[0]」を付けてpsd全体の書き出しを行う必要がある
	if [ `echo ${line}|grep .psd` ]; then
		line=${line}[0]
	fi

	# リサイズをする・しない場合の両方に対応させた処理
	resizeOpt=""
	if [ ${fileSize} != xxx ]; then
		resizeOpt='-resize '${fileSize}'x> -resize x'${fileSize}'>'
	fi

	# 各書き出し拡張子に対しての処理
	case ${outExt} in
	*jpg*)
		convert -verbose ${line} ${exif} ${resizeOpt} -quality ${quaVal} ${dir}/${line%.*}.${outExt};;
	*png8*)
		convert -verbose ${line} ${exif} -resize ${resizeOpt} -colors ${colVal} PNG8:${dir}/${line%.*}.${outExt%8*};;
	*png*|*png24*)
		convert -verbose ${line} ${exif} -resize ${resizeOpt} -quality 95 ${dir}/${line%.*}.${outExt%24*};;
	*gif*)
		convert -verbose ${line} ${exif} -resize ${resizeOpt} -colors ${colVal} ${dir}/${line%.*}.${outExt};;
	*)
		convert -verbose ${line} ${exif} -resize ${resizeOpt} ${dir}/${line%.*}.${outExt};;
	esac

done

# 元のディレクトリへ戻る (pushd <--> popd)
popd

# プログラムの終了
exit

前編 でも載せたけど、このプログラムを実行した結果を以下に、macとwinそれぞれで。
jsxの場合も参考までに。

実行結果

  • 【 処理内容 】
    大きさ 4000x3000 のjpgファイル 275枚(1.79GB) を 長辺1000px にリサイズしてjpg書き出しする
    
    【 PCスペック 】
    ■ win: windows7 32-bit RAM:4GB(Intel Core i7 / 870 / 2.93GHz) / ImageMagick:6.8.9-8
    ■ mac: MacOSX(v10.9.5/Mavericks) 64-bit RAM:8GB(Intel Core i5 / 2.6GHz) / ImageMagick:6.8.8-6
    
    【 結果 】
    ■ win
    ・ImageMagick: 3分30秒
    ・jsx(Photoshop): 10分45秒
    
    ■ mac
    ・ImageMagick: 9分20秒
    ・jsx(Photoshop): 5分15秒
    

win:3分30秒、mac:9分20秒。この差はいったい…??

もう今後は簡単な画像処理全般 ImageMagick で済ましちゃおうかなーなんて思ってたけど、そういうわけにもいかないかも。
これが あまり早くない。メモリもたくさん食う ってことかな…??
そういうのは詳しくないのでさっぱりです…

まぁその都度用途に合わせて効率よくプログラムやらソフトを使っていけばいいか(・∀・)

とりあえず ImageMagick がどんなもんか試せたので良かった。
前後編でお付き合いいただきありがとうございます(^^ゞ

今後なにか良い活用法を見つけたら記事にしていこうと思います。
「こんな便利な使い方あるよ!」なんてのがあれば教えてください!

それではまたー!

Share