EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

ImageMagickを使った画像縮小について

以前ディスク容量逼迫に伴に、jpegtranを使った画像最適化の記事を紹介しましたが、さらにディスクの整理が必要になり、今回はImageMagickを使った画像縮小方法について紹介します。

eatsmart.hatenablog.com

ImageMagickとは

ImageMagickは画像を操作したり表示したりするためのソフトウェアです。
今回は、Linux上にImageMagickをインストールして、シェルスクリプトによるコマンド操作で画像の縮小を行う事にしました。
インストールは非常に簡単で、ubuntuの場合apt-getコマンドでインストールが行えます。

sudo apt-get -y install imagemagick

ImageMagickによる画像の縮小

ImageMagickを利用して、画像のサイズ変更を行うにはconvertコマンドを利用します。
基本的なコマンド操作は下記の通りです。

convert -resize (width)x(height) (変換前の画像名) (変換後の画像名)

また、今回は元画像のアスペクト比を維持したまま指定サイズに満たない場合縮小を行わない為、下記オプションを利用しました。

convert -resize (width)x(height)> (変換前の画像名) (変換後の画像名)
例
convert -resize 640x640> src.jpg dst.jpg

ちなみに、「convert -resize 640x640< src.jpg dst.jpg」とした場合、src.jpgの画像サイズが640x640より小さい場合のみ指定サイズへの変換が実行されます。
その他オプションで、縦横比を無視したりパーセンテージで拡大・縮小が行え非常に便利です。

シェルスクリプトによる画像縮小処理について

基本的な操作は、jpegtranの画像最適化で作成したスクリプトと同様ですが、今回はフォルダー毎に縮小する画像サイズを変更したい為、ターゲットのフォルダーと画像サイズをパラメータ化してみました。

image_resize.sh

#!/bin/bash

while getopts d:hs: OPT
do
  case $OPT in
    \?) OPT_ERROR=1; break;;
    d) PATH="$OPTARG";;
    s) SIZE="$OPTARG";;
    h) HELP=true;;
  esac
done

shift $(( $OPTIND - 1 ))

count=0

for TARGET in `/usr/bin/find ${PATH} \( -name \*.jpeg -o -name \*.JPEG -o -name \*.JPG -o -name \*.jpg \) -and -daystart -mtime +3 | /usr/bin/head -n 500`

do
    echo '####target size is '$SIZE
    echo '####target list is '$TARGET
    /usr/bin/convert -resize $SIZE'x'$SIZE'>' "${TARGET}" "${TARGET}"

    echo $count
    count=$((count+1))
    if [ $((count%1)) -eq 0 ]; then
       echo 'sleep'
       /bin/sleep 0.01
    fi
done

また、上記シェルスクリプトの使い方は以下の通りです。

image_resize.sh -d /tmp -s 640
※tmpフォルダー配下にあるjpeg画像を再帰的にアスペクト比を維持したまま640ピクセルに縮小する


今回は、トータル170G近くあった画像を、130G位まで減らすことが出来ました。
ImageMagickは画像の拡大縮小以外にも、画像形式・フォーマットの変換、画像の回転/反転等いろんな操作が行えるのでよかったら活用してみて下さい。