[ImageMagick] convertコマンドの使い方

Post date: Mar 1, 2010 2:46:47 PM

何のコマンド?

convertはImageMagickというソフトウェアパッケージに含まれるコマンドの1つで,画像ファイルの変換を行う。たいていのファイルはconvertで処理することができる。

フォーマットの変換

convertコマンドの文法は

convert [ options ... ] input_file output_file

で、(少なくともoutput_fileの)フォーマットは拡張子で判断する。たとえば,a.epsというファイルをJPEG形式に変換するには、

$ convert a.eps a.jpg

とします。これはBashのブレース展開を利用すると

$ convert a{.eps,.jpg}

とも書ける(convertコマンドに渡る引数は上と全く同じになる)。

JPEGへの出力の場合、画質すなわち圧縮率を-qualityオプションで指定することができる。

$ convert -quality 30 a{.eps,.jpg}

qualityの数値は1以上100以下の整数で、小さいほど質が悪い、すなわち圧縮率が高くなる。

複数ファイルに対する操作

シェルとの組み合わせ

a01.psからa30.psまでのファイルを一度にjpgファイルに変換する。

convertコマンドならば、Bashのfor文と組み合わせることにより、

$ for i in $(seq -w 1 30); do convert -quality 30 a_$i{.ps,.jpg}; done

で作業が完了します。あるいは作業しているディレクトリに拡張子が".ps"のファイルが上記の30ファイルしかないのであれば、

$ for f in *.ps; do convert -quality 30 $f ${f%.ps}.jpg; done

としてもよい。こちらであれば、ファイル名がバラバラの場合も通用します。

複数ファイルを1つのPDFファイルにまとめる

PDFへの変換もoutput_fileの拡張子を".pdf"にすることによってできる。この場合、画像をPDFに埋め込むという感じになるので、サイズを小さくしたい場合はあらかじめJPEGで圧縮したものをPDFに変換する。

$ convert a_01{.jpg,.pdf}

PDFへの変換で便利なのは、input_fileを複数指定することにより、複数の画像ファイル(形式はバラバラでもよい)を1つのPDFファイルにまとめることができることです。大量の画像ファイルを1回で印刷したい場合に便利ですね。

$ convert $(for i in \$(seq -w 1 30\); do echo a_$i.jpg; done) a.pdf

もとのjpgファイルが,a_?? (??には数字が入る)しか無い場合には,

$ convert a_??.jpg shikepri.pdf

でよい。

サイズの変換

-resizeオプションでサイズの変換(拡大・縮小)ができる。幅・高さを指定する方法とパーセンテージ指定する方法がある。

$ convert -resize 256x256 flower{,.new}.jpg

とすると、縦横比を保ったまま、256x256のハコに収まる最大サイズに拡大・縮小される。

$ convert -resize 50% flower{,.new}.jpg

とすると、幅・高さそれぞれ50%に縮小されます(もちろん縦横比は保存される)。

これも威力を発揮するのは、大量のファイルに対して一括処理を行いたい場合ですね。

ps (eps)ファイルを変換する場合

デフォルトだと,解像度が落ちることがある.その場合,-densityオプションをつける.

convert -density N hoge.eps hoge.png

Nはgeometryを指定する(100~600ぐらいの数を指定するとうまくいくようだ).

画像の矩形切り抜き

-cropオプション

使用例

+-------------------+
| (a,b)             |
|   +----------+    |
|   |          |    |
|   |          |    |
|   |          |    |
|   |          |    |
|   +----------+    |
|            (c,d)  |
+-------------------+

内側の四角の部分で切り取る。

左上が原点なので注意!

(a,b), (c,d)を知るためには、 Windowsに付属している「ペイント」というアクセサリにあるツールをつかう。マウスを持っていったところの座標が右下に表示される。

オプション指定の例

width=$(echo "scale=6; $c - $a" | bc)
height=$(echo "scale=6; $d - $b" | bc)
x_offset=$a
y_offset=$b
opt_crop -crop ${width}x${height}+${x_offset}+${y_offset}

使用例

$ convert $opt_crop input_file output_file

サンプル・シェルスクリプト

ポストスクリプトファイル(ps)の余白を切り取って、jpgファイルに変換する

シェルスクリプト: crop.sh ダウンロード

入力ファイル: wtsurf01.ps ダウンロード

出力ファイル: wtsurf01.jpg ダウンロード

実行例

$ ./crop.sh wtsurf01.ps
Shell script, crop.sh starts.
Check Parameters
density= 300
+---------------+
| (a,b)      |
|   +------+  |
|   |    |  |
|   |    |  |
|   +------+  |
|      (c,d) |
+---------------+
a= 550, b=2000
c= 1750, d=3500
Input : wtsurf01.ps
Output : wtsurf01.jpg
Done ./crop.sh.sh

-chopオプション

左から 100 dot、上から 200 dot 削除 (右下が残る)

$convert -chop 100x200 foo.png bar.png

逆に左上を (100x200) 残したい場合は

convert -chop 10000x10000+100+200

のように、オフセットとして指定して、実サイズより大きいサイズで削除すればよい。但し、オフセット値が 0 のときは convert -chop 0x10000+0+100 のように指定のこと。

参考となるウェブサイト

http://www.fan.gr.jp/~azure/links/imagemagick.html

http://nile.slis.tsukuba.ac.jp/~yuka/memo/imagemap.html