NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2018.05.08

コマンドで画像を一括処理! ImageMagickの便利な使い方

ハル

画像を一括処理したい時、コマンドで行うことができたら便利ですよね。
いいツールはないかと調べていたところ、ImageMagickを知りました。
今回は、中でも「今後使えそうだな」と思った使用方法を紹介します。

ImageMagickとは

多くの画像フォーマットに対応したソフトウェアで、コマンドで利用することが可能です。

Macにインストール

Homebrewでインストールできます。

$ brew install imagemagick

コマンドについて

今回はconvertとmogrifyの2つのコマンドを使っていきます。

convert

個別の画像を処理する時に便利なコマンド

mogrify

mogrifyはImageMagickで一括処理を行う時に便利なコマンド

オプションの品質の指定について

『-quality』オプションで指定が可能です。

・pngの場合 1桁は圧縮方式の設定、10の桁は圧縮率の設定です。
デフォルトでは75設定になります。細かい説明はドキュメントをご覧ください。

https://www.imagemagick.org/script/command-line-options.php#quality

・jpgの場合 quality の指定は品質設定です。1から100の数値を指定できます。
PhotoShopのjpg書き出し時の品質で馴染みがあるのでわかりやすいかと思います。

便利なテクニック

画像の縮小サイズ作成

一括

$ mogrify -path ./thm -resize 300x300 -quality 100 *.jpg

単体

$ convert -resize 300x300 -quality 100 ./sample1.jpg ./thm/sample1-300x300.jpg

画像の拡張子の変更

すべてのpng画像をjpgに変更

mogrify -format jpg *.png

リストを作成しjpgに変更する

shell scriptを書いて行う方法でやっています。

サンプルの構造

project
├── images
│   ├── deep
│   │   └── sample3.png
│   ├── sample1.png
│   └── sample2.png
└── script
    ├── png-lists.txt
    └── png2jpg.sh

png-lists.txt

../images/sample1.png
../images/sample2.png
../images/deep/sample3.png

png2jpg.sh

#!/bin/sh
if [ "$1" = "" ]
then
    echo "[ERROR] 引数にリストのファイルを指定してください。"
    exit
fi

for i in $(cat $1)
do
    echo "---------------------"
    echo "Target File: ${i}"
    filename=${i%.png}
    echo "${filename}";
    convert "${filename}.png" "${filename}.jpg"
done

実行コマンド例

cd ./script
sh ./png2jpg.sh ./png-lists.txt

シェルスクリプトを使い、テキストファイルにリスト化したものを実行するスクリプトを作りました。
普段このスクリプトにやりたいことがあれば追記しています。
もとのファイルが必要なければrmコマンドを追加するなどしています。

まとめ

今回は、面倒な作業をまとめて処理してくれるImageMagickのコマンドテクニックを紹介しました。
小さなことでも時間短縮することが最近の目標です。
さまざまなことを効率化していきたいですね!