ImageMagick(convert)

imagemagickパッケージ内のアプリconvertで画像をコマンドライン変換

image to pdf

複数画像を1つのpdfにまとめる。

基本の使い方
$ convert hoge.jpg fuga.jpeg uho.png NEW.pdf
画像のファイル名を連番にしておいて、ワイルドカードで1括指定。
$ convert *.jpg NEW.pdf
正規表現?も使える。
$ convert [0-9].jpg NEW.pdf

favionを作る

$ convert icon.png -define icon:auto-resize favicon.ico
head内に以下のタグ
<link rel="icon" href="/path/to/favicon.ico" />

resize.sh

画像のサイズを変換したいときに、convert っていう名前をすぐ忘れるので、resize.sh を作った。おすすめ。
フォルダ内の画像を一括変換できる。
@rafaelhdr が、1個のファイルでも動作するようにしてくれた。
意外と便利。


色指定で透過

$ convert -transparent white -fuzz 5% logo.png logo_.png

transparent オプションで透過色にする色を指定する。この例では、image.gif の白色部分を透過色にして hoge.gif に変換します。

また、一度に複数のファイルを変換したい場合は、mogrify コマンドを使用する。

$ mogrify -transparent white *.gif

ディレクトリ内のすべてのGIFファイルの白色部分を透過色にする。この場合は元ファイルが上書きされる

画像のフチの背景色を切り取って透明に

convert input.png \
  -alpha set \
  -background none \
  -channel RGBA \
  -fill '#00000000' \
  -fuzz 5% \
  -draw 'matte 1,1 floodfill' \
  output.png
 

  • draw の行を読む通り、 1,1 の座標からペイントツールのバケツのように #00000000 (透明) で塗りつぶす。

画像形式の変換

$ convert banner.jpg banner.png
新規にpngファイルが作られる

反転


カレントディレクトリ内の拡張子がjpgのファイルをtmpディレクトリ内に左右反転して保存

$ mkdir tmp && for file in *.*jpg; do convert $file -flop tmp/$file; done 

カレントディレクトリ内の拡張子がjpgのファイルを上下反転して上書き保存

$ for file in *.*jpg; do convert $file -flip $file; done


サイズ変換


一括サイズ変換(縦横比を維持)

$ for file in *.*jpg; do convert $file -geometry 320x100 $file; done

一括サイズ変換(縦横比を維持しない)

$ for file in *.*jpg; do convert $file -geometry 320x100! $file; done


結合


2枚の画像を左右に繋ぐ

$ convert +append sample-01.jpg sample-02.jpg out.jpg

2枚の画像を上下にに繋ぐ

$ convert -append sample-01.jpg sample-02.jpg out.jpg


画像にボーダーをつける

convert <変換前の画像名> -bordercolor (color) -border (width) x (height) <変換後の画像名>
$ convert before.jpg -bordercolor "#ffffff" -border 4×4 after.jpg #等幅
$ convert before.jpg -bordercolor "#CC0000" -border 4%×4% after.jpg #元画像の縦横比にしたがった幅


アニメーション


連番になった .gif からアニメーションを作る

$ convert -geometry 160x120  -loop 0 -delay 100 [1-5].gif animation.gif
  • -loop iterations引数を与えると iterations回だけループ。0を与えると、永久にループ
  • -delay x 引数を 与えると 1枚の画像を100分のx秒間 表示する

画像ごとに表示時間を変える場合、
$ convert -geometry 160x120!  -loop 0 -delay 100 1.gif -delay 200 2.gif animation.gif