原文:Examples of ImageMagick Usage (Version 6)


ImageMagick使用例

以下のウェブページではコマンドラインからImageMagick(略して"IM")を使用する例を一通り紹介しています。それとImageMagickのアプリケーションプログラミングインターフェース(API)を使用して何ができるのかについても併せて説明しています。そのため以下のページは簡単なコマンドライン(CLI)オプションマニュアルを読み終わったIMユーザーが始めに読むべきものになってます。

ネット上では「いったいどうすれば、、、」といった類の質問が繰り返されています。以下のウェブページの用例が、繰り返し発生している手順系の質問の大部分に答えられることを願っています。

ImageMagickメインサイト
Anthonyのグラフィックラボ

実用的な例

基本:基本コマンドと画像処理
画像ファイル操作:画像の読み書き
一般的な画像形式:GIFと、JPEG、PNG画像の操作
文字画像操作:テキストを画像へ変換する
フォント効果複合:フォント描画のスタイルとテクニック 
画像に注釈をつける:ラベル付けと画像の重ね合わせ
サムネイルとフレーミング:大きな写真の小さな参照画像
写真操作:写真の変更
レンズ補正:写真の歪みを補正する
画像のモンタージュ、配列:画像のインデックスと配列
複数画像のレイヤー:複数の画像を組み合わせる
アニメーションの基本:アニメーションの作成と研究
アニメーションの最適化:GIFアニメを軽量化する
アニメーションの修正:アニメーションの修正とマージ
ビデオ操作:実際の動画像を操作する
画像比較:2つ以上の画像を比較する
高度なテクニック:画像の複雑な操作
背景例:ランダムな背景生成の例

基本テクニック

キャンバスの生成:キャンバスと背景画像の生成
色の基本とチャンネル:低レベルな色操作
色の修正:一般的な色変換
マスキングと背景除去:アルファチャンネルと透過処理
色量子化とディザリング:色数を減らす
カッティングと縁取り:スライシング、ダイシング、フレーミング、トリミング
リサイズとかスケーリングとか:画像と拡大と縮小
リサンプリングフィルター画像のサイズ変更を制御する
画像合成:2画像の重ね合わせとマージ
画像上への描画:ベクターグラフィックと、MVG、SVG画像
簡単なイメージワーピング:反転させる、回転させる、ねじる
画像を歪ませる:鏡のカーニバルハウス
画像変換:画像の見た目を劇的に変える
画像マッピング効果:レンズと、ガラス、さざなみ効果
画像のぼかしと先鋭化:ぼかし、先鋭化、影
形状の形態学:ピクセル近傍の使用
画像の畳み込み:近隣との加重平均
フーリエ変換:周波数領域内の画像変換
アンチエイリアス:アンチエイリアス効果と問題
その他:こまごまと
API、スクリプティング、ビルディング:他の環境での使用法
Windows環境下での使用法:Windows PC上のIM
開発とバグ:新旧の開発提案とバグ

リポジトリへのリンク:他のIMスクリプトや情報へのリンク
参照インデックス:特定オプションへのクイックインデックス
サポートスクリプト:例で使用されているシェルスクリプト

用例ページ内で使用される記号の判例

altヒント、コツ、おまけ情報
alt上級ユーザー向け
alt旧バージョンの警告

テスト画像の保存ディレクトリ

小さい画像(画像表示)
写真(ファンシーインデックス)

ImageMagick使用例 -- 入門

ImageMagickとは何か? なんでもありな要約

ImageMagickは画像のバッチ処理用に設計されています。スクリプト(シェル、DOS、Perl、PHP、など)で画像処理の操作を組み合わせることができます。つまりこの操作は複数の画像に適用することができます。またはウェブアプリケーションや動画処理ツール、パノラマジェネレータなど他のツールのサブシステムとしても使用できます。ImageMagickはGUIの画像エディタ(訳注:ペイントとかPhotoshopとか)ではありません。

第一に、ImageMagickとは画像から画像への変換機です。元来その用途のために設計されました。ほぼすべての画像フォーマットを他のあらゆる画像フォーマットに変換できます。(できないものがあれば教えてください。)

訳注:こちらのメールフォームからAnthony氏に連絡できます。

そして、ImageMagickとは画像処理アルゴリズムのライブラリでもあります。コマンドラインとシェル/DOSスクリプトの組み合わせや、C、C++、Perl、Ruby、PHPなど多数のプログラミング言語を介してこのライブラリにアクセスすることができます。参照:ImageMagick APIs

IMは画像の品質を重視しているため、速度は二の次となっています。しかし妥当な時間内で処理が終わらないと言っているわけではありません。目が眩むほど速いわけではないというだけです。限定機能の画像フォーマットに圧縮しようとする場合などで、処理に時間がかかる場合があります。(訳注:サイズの大きいZIP圧縮形式のTIFF画像を大量に処理しようとすると業務時間がいくらあっても足りなくなる場合があります。)

ImageMagickは一般的には"ラスタ"と呼ばれるピクセルの矩形配列形式の画像を主に扱います。PostscriptやPDFといった"ベクタ"画像形式も扱えますが、ロードのときラスタ形式に変換することと、保存のときラスタ周辺にベクタイメージラッパーを生成するという代償を払うことになります。結果として、デフォルト設定で使うとベクタ画像の処理はひどいものになります。しかし、あるオプションを使用することでこの状況を改善できます。参照:ベクタ画像形式に関する言葉

訳注:ラスタとは画像を色のついた点の羅列として表現したデータのことです。ビットマップグラフィックスとは 〔 ラスタグラフィックス 〕 〔 ラスタ画像 〕 - 意味/解説/説明/定義 : IT用語辞典

これらのImageMagick使用例について

これらのページは、1993年に始めた私のImageMagickのヒントとコツ集から継続して発展してきたもので、同時期にその外観を形作っていた最新のワールドワイドウェブ上に置かれています。IMの多様な情報と、これらのページには含まれていないメモがまだあの文書中に存在しています。本ページはあなたが閲覧するためにデザインされていますが、ヒントとコツ集はただ自己啓発のためだけのものでした。そのため、曖昧だったりカオス的だったりする場合があるかもしれません。あなたがヒントとコツ集を読み、学んで、コメントをつけることを歓迎します。

他の使用例は、IMフォーラムのユーザー質問への回答からつまんできたり発展させたりしたものや、様々な問題への解決策として実際に役立ったものです。

他のIMユーザーから提案やEメールが届くことを楽しみにしています。こういうEメールは一般的にこれら使用例のページに改善と拡張をもたらします。

コマンドライン環境

すべての使用例は、BASHスクリプトを使用してUNIX、特にGNU/Linuxシステムで使用するために書かれています。結果として、いくつかの使用例では'for-do'ループを使用しています。ほとんどの使用例でコマンドを次行に続けるために行末でバックスラッシュ'\'を使用します。長いコマンドほど、さらに続く手続きを強調するために行を分割しています。

しかし、特定の文字を変更することで、これら使用例はPCのWindowsバッチスクリプトからでも使用できます。少しの変更をいくつかいれることで、PHPスクリプトと呼ばれる'システム'から例を直接実行することもできます。

これら代替環境でImageMagickコマンドを使用することに関する情報はWindows環境下での使用APIとスクリプティングを参照してください。貢献およびテスト例を歓迎します。

PerlMagickなどのAPI

PerlやC、C++、Ruby、PHPなどの言語からなるIM APIを使用するために、これらのどんな使用例を応用することも可能なはずです。正しく理解できるまで、まずはコマンドラインで試してみて、それから特定のAPIでの操作に変換することをお勧めします。

IMバージョン6で状況はとても改善されましたが、コマンドラインは実際には1回に1つの画像シーケンスを扱っているだけです。しかしAPIにこの制限はありません。より複雑な操作のため個別での一括でも複数の画像シーケンスの操作を可能にしています。この機能はIM APIを使用したこれら使用例の実装を容易にし、多くのコマンドライン使用例が要求するようなテンポラリファイルを保存する必要性を排除します。APIを使用する際、永久的および半永久的な画像のみディスクに保存する必要があります。

まずは使用例から初めて、ImageMagickで何ができるかを確認してください。それからコマンドライン上でやりたいことを定式化しましょう。大規模な修正を加えることが難しいスクリプトやAPIのコードで処理を実装する前に。

できればAPIのコードにコメントでやりたいことに相当するコマンドラインを記載してください。こうすることでコマンドライン使用時の結果と比較することができるようになります。これはあとで遭遇するかもしれない問題のデバッグにもなります。特にImageMagickライブラリコアの画像処理が改善された時のデバッグに役立ちます。

入力画像と結果をダウンロードする

可能な限り、私はIMに組み込まれている画像("logo:"とか"rose:"とか)をIMコマンド例の入力画像として使用するか、IMコマンドで入力画像を生成するようにします。後の使用例で前のコマンドの出力を再利用することもよくあります。このため通常は使用例を試してみるのにどんな'テスト'画像もダウンロードしてくる必要はありません。

訳注:logo:logo.jpgとか rose:rose.gifとか

しかし、このような生成画像や組み込み画像はいつも便利というわけではありません。私が外部の画像を使用する場合、そのようなセクションの後の使用例では入力画像か前出の使用例の結果を再利用することもあります。

たまにオリジナルのソース画像を表示するつもりです。大きい画像にはソース画像へのリンクを提供します。入力画像がよく知られていたり明らかである場合、通常は最終的な結果画像のみを表示します。

ほとんどすべてのIM実行コマンド例はそれらが登場するウェブディレクトリと同じ場所で実行されます。あなたが見るコマンドは実際に画像を生成するのに使用されたコマンドです。使用例の入力画像をダウンロードしたり閲覧したりするのにページのURLを変更してください。外部ソース画像の焼き増しは"images"と"img photos"のサブディレクトリにも格納してあります。これら画像のファンシー写真目録の例も参照してください。

使用例にてテキスト出力か画像情報が生成された場合はテキストファイルとして保存され、画像自体はウェブページでの表示用に生成されます。テキスト出力画像を選択するとコマンドによる実際のテキスト出力のコピーにリンクされます。

これらすべての使用例では出力画像を選択することでコマンド例で実際に生成した画像をダウンロードすることができます。ただしすべてのブラウザがすべての画像フォーマットに対応しているわけではないので注意してください。

外部の画像ソース

使用例のソース画像の大半はアンソニーのアイコンライブラリからきています。とりわけライブラリの背景タイルと、大きいクリップアートドラゴンのセクションからきたものが多いです。(ドラゴン最高!)

実はこのライブラリはWWWに先立っています。X Windowシステムで使用するためのいい感じでクリーンなアイコン画像が不足していたため、1991年にこれを作成しました。WWWの登場によりこの状況はもちろん変わりましたが、たとえ活発に更新していないにせよ、私のオリジナルライブラリはまだ存在しており、画像のソースとして利用可能なままとなっています。

いくつかの特定画像と大きい画像は、特定使用例の作者により寄贈されました。これら使用例の作者は貢献セクションかページの最下部でリスト化されています。

もし特定の画像を探しているなら、適当なものを発見するためにグーグル画像検索(みたいな)の使用を推奨します。もちろんこういった画像を個人的な目的のためにIMでconvertやresizeすることは許可されます。ただし、これら画像を商業的に使用する計画があるなら、著作権には十分注意してください。(訳注:商業利用する前に利用規約をよく確認しましょう。HPやサイトで文章や画像を使用する際、著作権法違反にならない方法 | nanapi [ナナピ]

Webページ上のPNG画像

多くの使用例では、下のようなPNG形式の画像を使用しています。
alt
PNG画像フォーマットは、他の画像フォーマットがほとんど提供していない半透明ピクセル付き画像のサポートをしています。とてもよく知られている画像フォーマットでもあり、それ自体として今日のほとんどの画像プログラムとウェブブラウザで使用可能なものです。

しかしながらいくつかのウェブブラウザは透過したPNG画像を正しく扱いません。(とりわけ顕著なのはMicrosoft Internet Explorer v6)このため、普通はJPEGとGIFをウェブ用画像として使い、半透明ピクセル付き画像を生成する時か、後続の使用例で正確な色が必要とされる時のみ、PNGを使用します。

IE v6ブラウザでPNG画像を表示させるために、複雑なJavaScriptを使った特別な‘スタイルシート’を使っています。これについてはIEのための透過PNGを参照してください。技術的には、これはIEだけの問題であり、ImageMagickの問題ではありません。

スクリーンに画像を表示する

問題はスクリーン上で画像を表示する際にも起こります。このため、透明または半透明ピクセルを目立たせる下地の'チェッカーボード'パターンを並べるため、以下のようにコマンドを使用することを推奨しています。

composite -compose Dst_Over -tile pattern:checkerboard image.png x:

alt
上の例で表示されている画像はシェルスクリプト”generate test”で生成した特別なPNG形式のテスト画像です。通常はこのようなウェブページ上へではなくディスプレイ上への結果出力になります。

注意深く観察すると、半透明色であるにもかかわらずチェッカーボードパターンが見えます。しかし画像全体としては完全に不透明です。このテクニックはすべてのディスプレイやウェブブラウザ、画像ビューアーで機能するはずです。

IM v6.0.2現在、"display"プログラムはこんな感じで自動的に機能しています。しかしカラーテーブルを使用している画像(例えばGIF)をそう扱っているようには見えません。(上述したように)"x:"出力画像フォーマットを使用することで、保存することなく、画像をスクリーン上に直接表示させます。詳細については出力画像を見せるを参照のこと。

フォント使用方法

使用例で私が使用するフォントは、私が個人利用のために長年かけて発見・保存してきたトゥルータイプフォントの小さなコレクションからきています。これらのいくつかは著作権下にあるのでオンライン上で公開することはできません。

訳注:トゥルータイプフォントとはAppleが開発したフォントです。多くのOSで対応しています。TrueTypeフォント(スケーラブル) / フォント | リコー

でもあなたが使用できる他のフォントに置き換えることはできます。使用例は、あなたのシステム上で使用できるどんなフォントであっても(おそらく画像サイズの変更を伴って)機能するはずです。マイクロソフトの”Arial”フォントや、”Times-BoldItalic”でさえほとんどのシステム上で機能するはずです。

あなたのIMで現在使用可能なフォントが何であるかを確認するために、以下のコマンドを実行してみましょう。(訳注:訳者の環境で実行したところ使用可能なフォントは467種類ありました。)

convert -list type       # for IM older than v6.3.5-7
convert -list font       # for newer versions

注意:要求されたフォントが見つからなかった場合、ImageMagickはArialやTimesなどのデフォルトフォントにそっと置き換えてきました。まだそうなってはいますが、最近は警告が表示されます。デフォルトフォントではなく使いたいフォントになっているかを確認するため、あらかじめフォントのテストをおこなってください。

私のLinuxシステム上では、特別なPerlスクリプト”imagick type gen”を使って、"type.xml"ファイルの生成と、ホームディレクトリの".magick"サブディレクトリへの保存を行っています。ImageMagickはこのXMLでフォントリストを含むファイルを使ってフォントを見つけます。このスクリプトは(単に新しいフォントを追加する場合はまず"updatedb"してから)"locate"して、システム上の使用可能なすべてのフォントについて説明してくれます。このセットアップでは、使いたいフォントの名前を特定するだけでよく、特定フォントファイルへのフルパスは必要ありません。

例えば、、、

    # Instead of using the command...
    convert -font $HOME/lib/font/truetype/favorite/candice.ttf \
            -pointsize 72 label:Anthony  anthony.gif
    # I can use the simpler font label...
    convert -font Candice -pointsize 72 label:Anthony  anthony.gif

alt IM v6.1.2-3以前、"type.xml"ファイルは"type.mgk"と呼ばれてました。もしIMの旧バージョンを使用しているならですが。

これらIM使用例のフォントはフォント例のモンタージュでリスト化されています。個人的にCandiceが好きなので、かなりよく使っています。

alt もしあなたも'Candice'や私が使っている他のフォントが好きなら、Free Fonts1001 Fonts.comから取得してください。

使用例ページの更新

これら使用例ページは改善作業が進行中です。通常私の興味が他へ移ると長い間ページの更新が止まります。

使用例はそれぞれのIMバージョンで発生しているだろう変更とバグを確認できるよう一般リリース前の最新のIMβリリース版を使ってしばしば再構築されます。しかし表示される画像例はIMコマンドが私のシステム上で生成したものです。他の画像が出てきたならあなたのIMはおそらく(古いバグを含む)かなり古いバージョンであるか、正常にインストールされていないかのどちらかです。

私にメールをくれたりIMメーリングリストIMユーザーフォーラムでImageMagickのある側面について議論することで、新しい使用例が追加されたり、全く新しいセクションができていくことを覚えておいてください。議論をすればするほど、使用例がよいものになっていきます。

もしIMで何か面白いことをしているなら、共有してください。あなたのテクニックを他のIMコミュニティに提供させてください。IM用例における最大の進歩のいくつかはあなたのようなユーザーから出てきました。

スペシャルサンクス

精力的に数か月を費やしてアップグレードや、バグ修正、そして私の頭のおかしなコマンドライン処理や、括弧、画像シーケンス演算子、GIFアニメーション処理に関する提案に耐えてきたCristyに心から感謝します。

彼はバージョン6を使用可能な最良かつ最も先進的なコマンドライン画像処理プログラムにするべく素晴らしい仕事をしてくれました。ほとんどのユーザーはそのことについて感謝しませんが、私は彼がIMに注ぎ込んできた努力に大いに感謝しています。

JPEGフォーマットとライブラリ、アフィン行列演算子(訳注:画像の拡大縮小、回転、平行移動などをまとめて3x3の行列を使って変換すること。アフィン変換 画像処理ソリューション)、そしてMagickベクタ画像に関連して一般的にもっとも有用な議論をしてきたGabe Schafferにも感謝したいです。

そして、PNGコーダーモジュールの調査を続け、カラー量子化とディザリングに興味を持つGlenn Randers-Pehrsonにも感謝します。彼が初めて’ハーフトーン’ディザリングをIMに追加して、後に私が新しいディザを配列ディザ設定ファイルに追加するべく更なる改訂と拡張をすることになりました。

そして最後に、問題、提案、ソリューションを提供してくれてきた非常に多くのIMユーザーフォーラムに潜伏する人々に感謝します。IM使用例を通じたアイディアや提案の貢献者としての名誉が彼らには与えられています。

'Bonzo'や、PHPスクリプトからIMコマンドを使用することについて詳述している彼のウェブサイトRubbleWebsのような、フォーラムでいつも質問に回答してくれる方たちへも感謝したいです。それと'scri8e'と光沢と星の扱いのための彼のウェブサイトMoons Starsにも。あと、Pete 'el_supremo'(彼のMagickWand C-Programmingを見よ)、そして他人の質問にいつも回答してくれる多くの人たちにも感謝します。

特別な感謝を一般画像歪み演算の初期実装において主要な手助けをしてくれた画像処理黎明期の研究者Fred Weinhausへ送ります。将来のIM機能追加のためのコンセプトの証明としてFredのImageMagickサイトでFredのImageMagickスクリプトを見れます。

一般画像歪み出力を大幅に改善する楕円加重平均リサンプリングを作り直したデジタル画像処理のエキスパート、Nicolas Robidouxにも感謝します。

そして最後に、フォーラム上かまたはウェブ上で、他のユーザーに対していくつかのプロジェクトの一部として使用するIMコマンドの共有をしていただいたImageMagickの多くのユーザーにも感謝します。皆様全員、発見を共有する意思と寛大さにおいて、賞賛に値します。

さておしゃべりはもう十分でしょう。使用例を見に行ってください。

作成:2003年11月7日
更新:2012年11月30日
著者:Anthony Thyssen <A.Thyssen_AT_griffith.edu.au>
使用例生成バージョン:IM v6.7.6-3 2012-03-28
ライセンス:IM使用例はImageMagickと同じライセンスに従います
URL:http://www.imagemagick.org/Usage/

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.