TeX Wikiの8月2日付けにImageMagickというエントリが作られていました.ImageMagickは,ちょっとした画像を作ったり,加工したりするときに,よくお世話になっていて,当ブログでもたびたび,自作のワンライナーを紹介してきました.
エントリの中身を見ると,
重要! Windows のシステムには C:\Windows\System32\convert.exe という「FAT ボリュームを NTFS に変換するコマンド」が存在します. ImageMagick 6.9.3-9 以前の画像変換コマンド名は convert でしたので,これと Windows の convert を混同しないように注意が必要です.
を見ておおと思ったり
なお,ImageMagick 7 以降,この convert というプログラム名は廃止されて magick に名称変更されています.
を見てへえと思ったりしました.ともあれ使ってみましょう.
http://imagemagick.org/script/binary-releases.php#windowsより,最初のファイル名(ImageMagick-7.0.2-6-Q16-x64-dll.exe)をHTTPでダウンロードしました.インストール時に,"Select Additional Tasks"という,オプション選択が出ました.
この中の"Install legacy utilities (e.g. convert)"にチェックを入れて(つまりconvertコマンドは使えるようにして),Nextのボタンを押し,インストールをしました.
C:\Program Files\ImageMagick-7.0.2-Q16に格納されました.ふだん,コマンド実行で使っているのはCygwinなので,次のコマンドを実行してパスを追加しました.
$ PATH=/cygdrive/c/Program\ Files/ImageMagick-7.0.2-Q16:$PATH
実行ファイルを確認しておきます.
$ which convert magick
/cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/convert
/cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/magick
$ ls -Fl "$(which convert)" "$(which magick)"
-rwxr-x---+ 1 Administrators なし 112128 7月 30 06:11 '/cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/convert'*
-rwxr-x---+ 1 Administrators なし 112128 7月 30 06:11 '/cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/magick'*
$ md5sum "$(which convert)" "$(which magick)"
6e3651e10360f6783657c143d52ea574 */cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/convert
18fefe8530d4b245702fa8f464e188a2 */cygdrive/c/Program Files/ImageMagick-7.0.2-Q16/magick
convertコマンドもmagickコマンドも,(Cygwinのパスでは)/cygdrive/c/Program Files/ImageMagick-7.0.2-Q16にあり,ファイルサイズは同じだけれども,中身は異なる*1と分かりました.
出来上がる画像に,違いはあるでしょうか.今回インストールしたmagickコマンドとconvertコマンド,そしてCygwinで以前より使用可能だったconvertコマンドとで,比較してみました.Re: 右ローテートとトランスポーズ,との3a.pngを生成するコマンドを使います.-qualityオプションなしと「-quality 94*2」をしてみました.
$ magick -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" 3a_magick.png
$ convert -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" 3a_convert.png
$ /usr/bin/convert -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" 3a_oldconvert.png
$ magick -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" -quality 94 3a_magick_94.png
$ convert -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" -quality 94 3a_convert_94.png
$ /usr/bin/convert -size 200x120 xc:white -stroke blue -strokewidth 2 -fill none -draw "polyline 20,20 20,100 60,20 60,100 100,20 100,100 140,20 140,100 180,20 180,100" -strokewidth 1 -draw "stroke-dasharray 2 4 path 'M 40,2 v 200' path 'M 80,2 v 120' path 'M 120,2 v 120' path 'M 160,2 v 120' path 'M 0,40 h 200' path 'M 0,80 h 200'" -quality 94 3a_oldconvert_94.png
$ ls -Fl 3a*.png
-rwx------+ (略) 2057 (略) 3a_convert.png*
-rwx------+ (略) 1639 (略) 3a_convert_94.png*
-rwx------+ (略) 2057 (略) 3a_magick.png*
-rwx------+ (略) 1639 (略) 3a_magick_94.png*
-rw----r--+ (略) 1814 (略) 3a_oldconvert.png
-rw----r--+ (略) 1497 (略) 3a_oldconvert_94.png
ファイルサイズは,古いバージョンで作ったほうがやや小さいです.画像を見比べると,点線の太さが違っています.3a_magick.pngだと,こうです.
それに対し,3a_oldconvert.pngは,こうです.
そうだ思い出した,ここで,3つの実行コマンドのバージョン情報を見ておきましょう.
$ magick --version
Version: ImageMagick 7.0.2-6 Q16 x64 2016-07-30 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Visual C++: 180040629
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib cairo flif freetype jng jp2 jpeg lcms lqr openexr pangocairo png ps rsvg tiff webp xml zlib$ convert --version
Version: ImageMagick 7.0.2-6 Q16 x64 2016-07-30 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2015 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Visual C++: 180040629
Features: Cipher DPC Modules OpenMP
Delegates (built-in): bzlib cairo flif freetype jng jp2 jpeg lcms lqr openexr pangocairo png ps rsvg tiff webp xml zlib$ /usr/bin/convert --version
Version: ImageMagick 6.9.3-10 Q16 x86_64 2016-05-04 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2016 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC OpenMP
Delegates (built-in): autotrace bzlib cairo fftw fontconfig fpx freetype gslib jbig jng jpeg lzma pangocairo png ps rsvg tiff webp x xml zlib
新しいバージョンの(C)の年が2015までなのにはちょっと驚きました.
フォントの扱いも,確認しておきますか.今度は,右ローテートとトランスポーズの「(2)(a)の画像」です.
$ cp /cygdrive/Windows/Fonts/msgothic.ttc .
$ ruby -e "print %w(e291a0e291a3e291a6e291a9e291ac0ae291a1e291a4e291a7e291aae291ad0ae291a2e291a5e291a8e291abe291ae).pack('H*')" > 2a.txt
$ magick -background white -fill blue -font msgothic.ttc -pointsize 40 label:@2a.txt -quality 94 2a_magick.png
$ convert -background white -fill blue -font msgothic.ttc -pointsize 40 label:@2a.txt -quality 94 2a_convert.png
$ /usr/bin/convert -background white -fill blue -font msgothic.ttc -pointsize 40 label:@2a.txt -quality 94 2a_oldconvert.png
今回も,ファイルサイズは2a_magick.pngと2a_convert.pngは同じで,2a_oldconvert.pngは100バイトほど小さくなりました.ただし画像サイズは,前二者が201x121,後者は202x121です.出来上がり画像を並べておきます.
なお,はじめにcpコマンドでMS ゴシックのフォントをコピーしているのは,新たにインストールしたImageMagickとCygwinのコマンドとで,パスの扱いが異なるのを回避するためです.
ファイル指定とは別に,利用可能なフォントを知るには,「magick -list font」のコマンドです.出力をざっと見ると,
Font: MS-Gothic-&-MS-UI-Gothic-&-MS-PGothic family: MS Gothic & MS UI Gothic & MS PGothic style: Normal stretch: Normal weight: 400 glyphs: c:\windows\fonts\msgothic.ttc Font: MS-Mincho-&-MS-PMincho family: MS Mincho & MS PMincho style: Normal stretch: Normal weight: 400 glyphs: c:\windows\fonts\msmincho.ttc
と出まして,msgothic.ttcがカレントディレクトリにない状態で,
$ magick -background white -fill blue -font 'MS-Gothic-&-MS-UI-Gothic-&-MS-PGothic' -pointsize 40 label:@2a.txt -quality 90 2a_magick.jpg
というコマンドでも,同じ画像が作れました.「/usr/bin/convert -list font」ではこのフォント情報が出て来ず,「/usr/bin/convert ... -font 'MS-Gothic-&-MS-UI-Gothic-&-MS-PGothic' ...」はエラーが出ました.
他にもいくつか試しましたが,コマンドレベルでの互換性はあるものの,生成されるファイルは新旧のバージョンで少し異なると思っておいてよさそうです.
ところで,ImageMagickのインストールにより,file:///C:/Program%20Files/ImageMagick-7.0.2-Q16/index.htmlがブラウザで読めるようになりました.Features and Capabilities以降に出てくる各リンクは,file://のものもあれば,ImageMagickサイトへ飛ぶものもあります.
ページ左上のおじいさんの画像(wizard.png)は,バージョン7で作り替えられたのかなと予想しながら,少し調べてみると,2011年に書かれたImageMagickのおじいさんがドヤ顔しているイラストください: やりくりんごに新旧画像がありまして,予想はハズレでした.