とらりもんHOME  Index  Search  Changes  Login

とらりもん - Imagemagick Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

!Imagemagickとは
*Linuxのコマンド感覚で、画像処理ができます。
*シェルスクリプトに組み込むことができるので、大量の画像処理も簡単。図表作成の省力化に!
*Windows版もあるらしい。perlやPHPなど、様々な言語のライブラリとしても使えるらしい。
*本家のサイト:http://www.imagemagick.org/

!エラー対策(特にPDFを処理する時)
[[https://linux.just4fun.biz/?Linux%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A/ImageMagick%E3%81%AEconvert%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95]]

!インストール
!! パッケージから楽にインストール
OSがUbuntuの場合は、apt-getでいけます。
apt-get install imagemagick
デスクトップ画面上部の「システム」→「システム管理」→「synapticパッケージマネージャ」で探してもOK。

!!ソースからコンパイルしてインストール
ImageMagickの最新版機能を使いたい時はこれ。パッケージからインストールしたやつと混乱しないように, ディレクトリ指定することが大切だと思います! [[参考|https://www.kkaneko.jp/tools/ubuntu/imagemagick.html]]
sudo apt -y update
sudo apt -y install build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config
sudo apt -y install git
cd /tmp
git clone https://github.com/ImageMagick/ImageMagick
cd ImageMagick
./configure --without-perl --prefix="/usr/local/ImageMagick7"
make
sudo make install
↑この例(2022/02/16 Ubuntu 20.0で動作確認)だと, /usr/local/ImageMagick7/bin/の中にImageMagickのコマンドが入ります。使う時は,
$ /usr/local/ImageMagick7/bin/convert --version
みたいに(いちいち面倒ではあるけど)パス指定して使うのがよいでしょう。/usr/local/ImageMagick7/bin/を環境変数PATHに登録すればコマンド本体だけで実行できるけど, それだとパッケージからインストールしたやつと混乱するおそれがあります。


!基本的な使い方

基本的に、「コマンド (オプション) 入力ファイル 出力ファイル」のような感じで端末に打ちこみます。

例えば、画像のフォーマットをjpg形式からpng形式に変えたい場合には、以下のようにします。

convert test.jpg test.png

convertは、imagemagickのコマンドのひとつで、最もよく使うものなので、ぜひ覚えましょう。というか、convertがあれば、ほとんど何でもできます。まさに神です。

convertには、たくさんのオプションがあります。例えば、画像を時計回りに90度回転するには、以下のrotateオプションをつけます。

convert -rotate +90 test.jpg test1.jpg

オプションは、imagemagickのサイトに山ほど載っているので、それを参考にしてください。
*http://www.imagemagick.org/script/command-line-tools.php#convert

以下に、よく使う例を挙げておきます。

!よく使う例

!!!画像のフォーマットを変える
convert test.jpg test.png

epsファイルを変換する場合
convert -density 144 test.eps test.png
*-densityは解像度の変更オプション。
*epsの変換の場合、デフォルトだと72dpiだが、それだと小さすぎるので、上のようにする。
*背景が白でなく、透明になってしまう場合がある。gimpでアルファチャンネルの無効化をすれば直る。もしくは,
convert input.png -background white -flatten -alpha off output.png

!!!画像のサイズを変える
-geometryか、-resizeを使う。

例1)ピクセル数を指定する場合
convert -geometry 300x200 test.png s_test.png
*「-geometry 横ピクセル数x(小文字のエックス)縦ピクセル数」で大きさを指定。
* 縦横比は自動的に固定される。
もしsource.jpgが600x400の画像なら,
convert source.jpg -resize 200x200 destin.jpg
-> 200x66画像 (大きい辺を合わせる)
convert source.jpg -resize 200x200^ destin.jpg
-> 300x200画像 (小さい辺を合わせる)


例2)%を指定する場合
convert -geometry 80% test.png s_test.png

!!!画像を回転させる
convert -rotate +90 test.png s_test.png
*+で時計回り、-で反時計回り。

!!!画像をトリミングする(一部を切り取る)
convert -crop 300x200+10+10 test.png out.png
*[切り取る部分の横ピクセル数]x[切り取る部分の縦ピクセル数]+[横のはじまり(左から数えて)]+[縦のはじまり(上から数えて)]のように指定。
*オフセットの指定には、+だけではなく、-も使える。

!!!画像を合体する
convert +append test01.png test02.png out.png
*+だと水平方向、-だと垂直方向に並べる。

!!!2つの画像を合成する(base.pngにon.pngを重ねる:左上がデフォルト)
convert base.png on.png -gravity northeast -composite out.png
*-gravityで位置を指定(ここでは右上)

!!!たくさんの画像をタイル状に敷き詰めて合成する
montage 2*.jpg -tile 10x10 -geometry 200x60+1+1 out.jpg

!!!色を変える
convert -fill "#666666" -opaque "#FF0000" test.png out.png
*opaqueに指定した色(ここでは赤色)を、fillに指定した色(ここではグレー)に変える。

!!!余白を作る

convert -gravity southeast -splice 25x25 test.png out.png

!!!画像と画像のあいだに余白をつけて、くっつける

convert test1.jpg -background white -gravity east -splice 5x0 test2.jpg +append -splice 5x0 test3.jpg +append -bordercolor white -border 5x5 out.jpg

!!!文字列を画像に入れる
convert source.jpg -fill white -pointsize 45 \
  -gravity NorthWest -draw 'text 2,2 "comment1"'\
  -gravity SouthWest -draw 'text 2,2 "comment2"'\
  -gravity NorthEast -draw 'text 20,2 "comment3"' \
  -gravity SouthEast -draw 'text 20,2 "comment4"'
- > 左上にcomment1, 右上にcomment2, 左下にcomment3を, 右下にcomment4を書く。20はコメントのだいたいの幅を指定。

!!!文字列を画像にする

convert -size 1700x200 -font Verdana-Negreta -gravity center label:"2006 DOY200" out.png
*使えるfontは、「convert -list font」と打てば、表示される。
*上のリストに表示されないが,そのパソコンに入っている別のフォントを使いたい場合,フォント名のかわりにフルパスで記入する(/usr/share/fonts/truetype/msttcorefonts/Arial.ttf のように)。
!!!画像に文字列を入れる
Verdana-Negreta,フォントサイズ18, 黒のフォントで「test」と入れる場合
convert -font  Verdana-Negreta -pointsize 18 -fill black -draw "text 50,50 'test'" input.png out.png

!!!GIFアニメの作成
convert -delay 30 test*.png test.gif

convert *.jpg -resize 200 -loop 0 -delay 25 a.gif

!!!PDFをJPEGに
convert -density 600 -geometry 1000 in.pdf out.jpg
↑この引数の並び順を変えると結果が変わってしまう(特に, in.pdfを前に持ってきてはダメ)。

!!!画像の一部をぼかす
convert input.jpg -region 700x100+0+500 -blur 5x5 -region 850x102+350+600 -blur 7x7 out.jpg
↑2つの領域を, しかも別々のぼかし加減でぼかす。-regionは, 横サイズx縦サイズ+横開始位置+縦開始位置。

!!!画像の統計量を計算・表示(平均や標準偏差やエントロピーや尖度や歪度や...)
identify -verbose input.jpg

!!!2つの画像の類似度
compare -list Metric    # どんな類似度が使えるかを表示
/usr/local/ImageMagick7/bin/compare -metric SSIM image1.jpg image2.jpg NULL


!!!標準入力を使う
パイプを使いたいときには、こんな感じ。
cat input.png | convert - -rotate +90 output.png


!!!ブレース展開
$convert 01{.eps,.jpg}  => convert 01.eps 01.jpg  と同じ。

!シェル変数の取り扱い
シングルクオーテーション内でシェル変数を書くと展開されないので、ダブルクォーテーションで囲む。
$ convert -draw ' circle $some_shell_value ... ' # これだと展開されない
$ convert -draw " circle $some_shell_value ... " # これだと展開される