「画像を500ドット幅にリサイズしたい」といった場合、一つ一つ画像処理ソフトウェアで開いてサイズ変更するのは少々面倒な作業だ。こうした作業がコマンドラインから簡単に行えるツール「ImageMagick」を取り上げる。
本コーナーではWindows環境を対象として、便利で、長い間利用できそうなソフトウェアやインターネット上のサービスを紹介していきます。必ずしもオープンソースに限定はしませんが、長い間アップデートされ続けていて、今後も継続して使えそうなソフトウェア/サービスに注目します。
PCで作業するとき、ちょっとした画像処理を行いたくなることもあるだろう。それが日常的に繰り返される作業なら、自動化したくなるのは当然だ。そんなとき、コマンドラインから画像処理が可能なツール「ImageMagick(イメージマジック)」を利用するとよい。
ImageMagickは、コマンドラインから起動する画像処理ツールだ。多数の画像ファイル形式に対応し、フォーマット変換やサイズ変更といった用途から、画像の合成、画像の分析などに利用するFFT(高速フーリエ変換)などもカバーする。もちろん、ゼロから画像を生成させることも可能だ。
例えば、「カレントディレクトリにあるPNGやJPEGのファイルから100×100ドットのPNG形式のサムネイル画像を作ってファイル名の先頭をThumb-にする」といった処理ならば、以下のように記述する。
magick *.png *.jpg -set filename:x "Thumb-%t" -thumbnail "100x100" "%[filename:x].png"
「-set filename:x "Thumb-%t"」で、「filename:x」という変数に元のファイル名(「%t」で参照できる)と「Thumb-」をつなぎ合わせた文字列を設定し、最後の「"%[filename:x].png"」では、これを参照して出力用のファイル名として指定している。
ImageMagickには、このように1つのコマンドラインで複雑な記述が簡単に行える工夫が多数ある。またImageMagickを、PostScriptインタープリターであるGhostScriptと併用すれば、PDFファイルを扱うこともできる。以下は、PDFファイルの表紙(0ページ目)のサムネイルを作成するコマンドだ(詳細は後述)。
magick sample.pdf[0] -type TrueColorMatte -thumbnail x600 -background white -alpha remove thumb.png
ただ高機能な分だけ、全体を把握するのは簡単ではない。何せ300個近い膨大なコマンドラインオプションを持つプログラムだからだ。しかし後述するように、コマンドラインの構造とImageMagick独自のパラメーター記法であるデレゲート(Delegate、委譲)を理解すれば、比較的簡単に使いこなせる。個々のオプションの機能も、画像処理の知識は必要なものの、それぞれは単一の処理である。
ImageMagickは、1987年(いまから30年以上も前!)から開発が続くソフトウェアだ。このためインターネットには情報も多く、検索でさまざまな応用のページが見つかる。「ImageMagick」というキーワードと処理内容などで検索すれば、結構ページを見つけることができるだろう。
なおImageMagickは、その高機能さからWebサーバ側での画像処理に使われることも多い。しかし、Webサーバで外部ファイルを扱うプログラムは、セキュリティホールになりやすい。ImageMagickには、こうした利用方法での脆弱性(ぜいじゃくせい)が知られており、これを警告するWeb記事も少なくない。
ただローカル環境で利用するのと、Webサーバで利用するのでは環境が異なる。ローカルで直接ImageMagickを利用する場合には、セキュリティについてそれほど心配する必要はないだろう。ただし、既知の脆弱性が解消されている最新版を利用するように心掛けること。
ImageMagickは、そのWebページに基本的な情報がある。また、ここからダウンロードも行える。開発元は、ImageMagick Studioだ。同ソフトは、Apache 2.0 Licenseを採用しているオープンソースソフトウェアであり、商用/非商用を問わずに無料で利用可能である。LinuxやUNIX(Solaris)、macOS、iOS、Windows OSに対応した各種バイナリが同サイトから直接提供されているため、コンパイルなどを行うことなくすぐに利用が可能だ。
インストールイメージは、ImageMagickのサイトから取得する。
Windows OS版には複数のバイナリがある。64bit版(x64)、32bit版(x86)という違いの他に、内部で利用する画像データ表現形式(色のビット数。8bit整数、16bit整数、浮動小数点)、モジュールがDLLなのかスタティックリンクなのかといった違いだ。これは、利用するメモリ量に違いがある。画像の内部表現形式が大きくなるほど占有するメモリも大きくなる。
また、さまざまな機能がDLLで提供されるか、本体に直接組み込まれているか(static版)といった違いもある。これらは、サーバ側での利用や仮想環境で、利用可能なメモリに上限があり、かつ処理の応答時間が限定されるような場合に、利用メモリ量を確定させるために使われることが多く、デスクトップアプリケーションとしてコマンドラインから利用するような場合にはほとんど気にする必要はない。
何をインストールすべきか分からないのであれば、一番上にリストされている「ImageMagick-7.x.x-x-Q16-x64-dll.exe」(xはバージョンにより変わる)を選択すればよい。これがWindows OSの標準推奨版で、色を16bitで表現するx64用のDLL版である。
メモリに余裕があり、複数の処理を連続して行わせるような場合には、HDRI版「ImageMagick-7.x.x-x-HDRI-x64-dll.exe」を入れるのもいいだろう。HDRI版は、内部表現に浮動小数点を使うため複数処理を行った場合の演算誤差が少なくなるからだ。ただし上述のQ16版でも、よほど処理を繰り返さないと演算誤差を感じることは少ない。コマンドラインで指定できる程度の簡単な処理ならばそれほど気にする必要はない。
なお、ImageMagickは、Chocolatey経由でのインストール、アップグレードも可能だ(Chocolateyについては、知っトクWindowsツール「コマンドでWindowsアプリを楽々管理『Chocolatey』」参照のこと)。ただしこの場合インストールされるのは標準推奨版となる。
ImageMagickを完全に解説するには複雑すぎるため、理解に必要となる基本的なことだけを解説しておく。ImageMagickのコマンドラインには2つの記述方法がある。一つは現行のImageMagick Ver.7の標準的な形式(以下V7形式と呼ぶ)、もう一つはVer.6までの指定方法やコマンドと互換性のある「V6 Tools」形式だ。これから利用するというのであれば、V7形式のみを覚えればいいだろう。
現在の最新版であるImageMagick Ver.7.xのWindows OS版では、以下の2つのコマンドを持つ。
ファイル名 | 内容 |
---|---|
magick.exe | ImageMagick本体 |
imdisplay.exe | 画像表示プログラム |
Windows OS版ImageMagick Ver.7.xのコマンド |
このうち、メインになるのがmagick.exeコマンドであり、imdisplay.exeは、GUIベースの画像表示プログラムだ。これは、画像を表示するためだけのコマンドであり、magick.exe側から起動を指定することもできるので、あまり気にする必要はない。
V6 Tools形式は、magick.exeの後に「convert」や「identify」などのサブコマンドを付ける。この形式を使うことで、コマンドライン指定はImageMagick Ver.6やそれ以前のコマンドライン指定と互換性を持たせることが可能だ。
サブコマンドは、かつてそれぞれが独立したコマンドになっていて、Ver.7でもmagick.exeをconvert.exeにハードリンクすれば、旧版と同じようなコマンドライン指定が可能になる。また、インターネット検索した実行例などが「convert」から始まる場合、「magick.exe convert」と先頭部分を読み替えればよい。
何せ考え得る限りの画像処理を一つのコマンドでこなすため、オプションの数は多く、現在のバージョンでは300個弱ある。magick.exeの一般的な画像処理のためのコマンドラインは、以下のような要素から構成される。
要素 | 概要 |
---|---|
入力 | 一つ以上の処理対象(画像) |
オプション | ImageMagickやその動作に対する設定や処理。最低一つ必要 |
出力 | 処理結果(画像)。コマンドによっては必須 |
ImageMagickの一般的な画像処理のためのコマンドライン要素 |
つまり入力、オプション、出力は、最低一つが必須だ。一部、出力ファイル指定が不要な「-help」などの特殊な構造を持つ例外的なオプションも存在する。
入力、出力ともに必要で、一般的にはファイルパスを指定するが、「-」を指定すると標準入出力を利用することになる。つまりmagick.exeは、コマンドラインのパイプラインの一部として利用できる。
また、入力に使う画像は、複数のファイル名をスペースで区切って並べる「イメージシーケンス」として記述できる。ただし、処理オプションには、イメージシーケンスをまとめて受け付けるもの(例えば、画像の連結処理など)と、個別の処理の繰り返しとして処理するもの(例えば、サイズ変更)があるので注意してほしい。
ImageMagickには、イメージシーケンス中の一部の画像に対してのみオプションを適用する「イメージスタック」という表記方法もある。これは、括弧を使って、画像ファイルと処理オプションを区切るものだ。
magick.exe ファイル1 ( ファイル2 option1 ) option2 出力
その場合、上記のような表記を行う。このとき、option1はファイル2に対してのみ作用し、ファイル1には作用しない。option2は、ファイル1とファイル2(の処理結果)に対して作用する。
Copyright© Digital Advantage Corp. All Rights Reserved.