ImageMagick 使用例
ImageMagick バージョン7
これらのページは、ImageMagick(略して「IM」)バージョン7 をコマンドラインから使う例をまとめたものです。多くはレガシー版である バージョン6 にも直接対応する書き方が存在します。また、ImageMagick のアプリケーション・プログラミング・インターフェース(API)で何ができるかも示します。簡潔な コマンドライン(CLI)オプション・マニュアル を読んだ後、IM ユーザーが最初に訪れるべきページとなることを目指しています。
ネットワーク上では「どうやって…するの?」という同じ質問が繰り返し尋ねられます。これらのページが、よくある「ハウツー」の疑問の大半に答えられることを願っています。
関連サイト: Fred's ImageMagick Scripts / RubbleWebs(PHP から IM CLI を使う) / Snibgo's ImageMagick pages / ImageMagick 公式サイト
ℹ️ 本ページは usage.imagemagick.org(Anthony Thyssen 氏による IM Examples)の非公式翻訳です。ImageMagick 本体ドキュメントの日本語訳は ImageMagick 日本語ドキュメント を参照してください。
実用例(Practical Examples)
- 基本的な使い方
- 基本的なコマンドと画像の扱い
- 画像ファイルの扱い
- 画像の読み込みと書き出し
- 主要な画像フォーマット
- GIF・JPEG・PNG 画像の扱い
- テキストから画像へ
- テキストを画像に変換する
- 複合フォント効果
- フォント描画のスタイルと技法
- 画像への注釈
- ラベル付けと画像の重ね合わせ
- サムネイルと枠付け
- 大きな写真の小さな参照画像
- 写真の加工
- 写真を加工する
- レンズ補正
- 写真の歪みを補正する
- モンタージュ(配列)
- 画像のインデックスと配列
- 複数画像のレイヤー
- 複数の画像を組み合わせる
- アニメーション基礎
- アニメーションの作成と研究
- アニメーション最適化
- GIF アニメーションを小さくする
- アニメーション変更
- アニメーションの変更と統合
- 動画の扱い
- 実写動画の画像を扱う
- 画像の比較
- 2 つ以上の画像を比較する
- 高度なテクニック
- 画像の複雑な操作
- 背景の作例
- ランダムな背景を作る例
- 配布リポジトリ
- 他の IM スクリプトや情報へのリンク
- リファレンス索引
- 特定オプションのクイック索引
- 補助スクリプト
- 例で使われるシェルスクリプト
基本技法(Basic Techniques)
- キャンバスの作成
- キャンバスや背景画像を作る
- 色の基礎とチャンネル
- 低レベルの色の扱い
- 色の変更
- 一般的な色の変更
- マスクと背景除去
- アルファチャンネルと透明度の扱い
- 減色とディザリング
- 色数を減らす
- 切り抜きと縁取り
- スライス・切り出し・枠付け・トリミング
- リサイズ・拡大縮小
- 画像の拡大と縮小
- リサンプリングフィルタ
- 画像リサイズの制御
- 画像の合成
- 2 つの画像の重ね合わせと統合
- 画像への描画
- ベクターグラフィックス、MVG・SVG 画像
- 単純な画像ワープ
- 反転・回転・ねじり
- 画像の歪み変換
- 遊園地の鏡の間のように
- 画像の変形
- 画像の見た目を大きく変える
- 画像マッピング効果
- レンズ・ガラス・波紋の効果
- ぼかしとシャープ
- ぼかし・シャープ化・影
- 形態学(モルフォロジー)
- ピクセル近傍を使う
- 畳み込み
- 重み付き平均の近傍処理
- フーリエ変換
- 周波数領域で画像を変更する
- アンチエイリアス
- アンチエイリアスの効果と問題
- その他
- こまごましたもの
- API・スクリプト・ビルド
- 他の環境での利用
- Windows での使い方
- Windows PC 上の IM
- 開発とバグ
- 新旧の開発提案とバグ
ImageMagick 使用例 — はじめに
ImageMagick とは何か(包み隠さぬ要約)
ImageMagick は画像のバッチ処理のために設計されています。つまり、画像処理の操作をスクリプト(シェル・DOS・Perl・PHP など)に組み合わせ、多数の画像へ適用したり、Web アプリケーション・動画処理ツール・パノラマ生成器など、別のツールのサブシステムとして使ったりできます。GUI の画像エディタではありません。
ImageMagick はまず第一に、画像から画像への変換器です。それが本来の設計目的でした。すなわち、ほぼあらゆる画像フォーマット(できないものがあれば教えてください)を、他のあらゆる画像フォーマットへ変換します。
しかし同時に、画像処理アルゴリズムのライブラリでもあります。これらはコマンドラインやシェル/DOS スクリプト(これらの例ページが示すもの)から、あるいは C・C++・Perl・Ruby・PHP など多数のプログラミング言語からアクセスできます。ImageMagick API を参照してください。
速度は IM の主要な特長ではなく、むしろ生成する画像の品質に重きが置かれています。とはいえ、妥当な時間内に画像を変換できないという意味ではありません。ただ目を見張るほど速くはない、というだけです。そのため、特に能力の限られた画像フォーマットへ圧縮しようとするとき、IM は特定の処理に時間がかかることがあります。
ImageMagick が主に扱うのは、ピクセルの長方形配列(一般に「ラスター」と呼ばれる)の形をした画像です。Postscript や PDF のような「ベクター」画像フォーマットも扱えますが、読み込み時にそれらをラスターへ変換し、保存時にラスターの周りにベクター画像のラッパーを生成するという代償を伴います。その結果、ベクター画像は既定設定では不適切に処理されがちです。ただし、特定のオプションでこの状況を改善できます。ベクター画像フォーマットについての一言 を参照してください。
この ImageMagick 使用例について
これらのページは、私が 1993 年に書き始め、ちょうど同じ頃に登場した新しい World Wide Web に置いた ImageMagick のヒントとコツ集 を発展・継続させたものです。IM の多くの側面について、これらのページに含まれていない情報も、その文書には今なお残っています。ただし、本ページが人に見てもらうために設計されているのに対し、ヒント集は私自身の備忘のためだけのものでした。そのため、場所によっては曖昧だったり雑然としているかもしれません。閲覧して学び、コメントを寄せていただくのは歓迎です。
その他の例は、IM フォーラム でのユーザーの質問への回答から取り出したり発展させたもの、あるいは様々な問題の解決策として寄せられたものです。
他の IM ユーザーからの提案やメールを楽しみにしています。そうしたメールは概して、これらの例ページの改善と拡充につながります。
コマンドライン環境
すべての例は UNIX、特に GNU/Linux システム上で BASH スクリプトを使うことを前提に書かれています。そのため、一部の例ではシェルの「for-do」ループを使います。多くの例は行末にバックスラッシュ「\」を置いてコマンドを次の行へ継続します。長いコマンドは、適用される手順を強調するために複数行に分割しています。
ただし、特定の文字の扱いを少し変えれば、これらの例を PC Windows のバッチスクリプトからも使えます。わずかな調整で、PHP スクリプト内の「system」呼び出しから直接実行することもできます。
これらの代替環境で ImageMagick コマンドを使う詳細は、Windows での使い方 と API とスクリプト を参照してください。寄稿やテスト例は歓迎します。
PerlMagick とその他の API
これらの例はいずれも、Perl・C・C++・Ruby・PHP などの言語から IM API を使う形にも適応できるはずです。まずコマンドラインで試して正しく動くようにしてから、使用している特定の API へ操作を変換することをお勧めします。
IM バージョン6 で状況は大きく改善しましたが、コマンドラインは実際には一度に 1 つの画像シーケンスしか扱いません。しかし API にはこの制限がなく、複数の画像シーケンスを個別にまたは一緒に操作して、より複雑な処理を行えます。この能力により、IM API を使ってこれらの例を実装する方が簡単になり、多くのコマンドライン例で必要となる画像の一時ファイル保存も不要になります。API を使う場合、永続的・半永続的な画像だけをディスクへ保存すればよいのです。
基本的には、例ページを足がかりに ImageMagick で何ができるかを知り、まずコマンドライン上でやりたいことを組み立ててから、変更が難しいスクリプトや API コードへ落とし込むとよいでしょう。
また、API コードには手厚くコメントを付け、可能であればやろうとしていることのコマンドライン相当を併記することをお勧めします。そうすれば、コマンドラインを使った結果と照合・比較できます。これは、特に Core ImageMagick ライブラリの画像処理が改善された際に後々遭遇しうる問題のデバッグに役立ちます。
入力画像と結果のダウンロード
可能な限り、IM 例コマンドの入力には IM に組み込まれた画像(「logo:」や「rose:」など)を使うか、IM コマンドで入力画像を生成するようにしています。また、前のコマンドの出力を後の例で再利用することもよくあります。そのため、例を自分で試すのに「テスト」画像をダウンロードする必要は通常ありません。
ただし、こうした生成画像や組み込み画像が常に都合よいとは限りません。そこで外部画像を使うときは、その入力画像や前の例の結果を、その節の後の例で再利用するようにしています。
元のソース画像が表示される場合もあれば、大きい画像ではソース画像へのリンクが提供される場合もあります。より一般的には、入力が周知または自明なため、最終的な結果画像だけが示されます。
示されている IM 例コマンドのほぼすべては、それが掲載されている同じ Web ディレクトリ内で実行されています。つまり、見えているコマンドが、その画像を実際に生成するのに使われたコマンドです。そのため、ページの URL を変更すれば、例が使った入力画像をダウンロードまたは閲覧できます。外部ソース画像の予備コピーは「images」と「img_photos」のサブディレクトリにも置かれています。それらの画像の Fancy Photo Index の例も参照してください。
例によってテキスト出力や画像情報が生成される場合、それはテキストファイルに保存され、Web ページ表示用にその画像が生成されます。テキスト出力の画像を選択すると、コマンドが実際に出力したテキストのコピーへリンクします。
これらすべての例で、出力画像を選択すれば、例コマンドが実際に作成した画像をダウンロードできるはずです。ただし、使われている画像フォーマットすべてを理解できるブラウザばかりではない点にご注意ください。
外部画像のソース
ちなみに、これらの例で使われるソース画像のほとんどは Anthony's Icon Library から来ており、特にライブラリの 背景タイル、大きなクリップアート、ドラゴン の各セクションのものです(私はドラゴンが好きなのです!)。補足: これらのページは、Web サイトが新サーバーへ徐々に移行中のためオフラインになっていることがあります。
このライブラリは実は WWW より前から存在します。X Window System で使える良質でクリーンなアイコン画像が不足していたため、1991 年に作りました。WWW の登場でもちろん状況は変わりましたが、私の元のライブラリは今も存在し、活発に成長してはいないものの、画像のソースとして利用可能なままです。
特定の画像や大きめの画像の一部は、個々の例の作者が寄稿してくれたものです。そうした例の作者は、寄稿セクションかページ末尾に記載されています。
特定の画像を探している場合は、Google 画像検索(または類似のもの)で適切なものを見つけることをお勧めします。もちろん、そうした画像を自分の目的のために IM で変換・リサイズできます。ただし、商用利用を計画している場合は著作権に注意してください。
Web ページ上の PNG 画像
多くの例で、このテキストの右側に示すような PNG フォーマットの画像を使います。PNG 画像フォーマットは半透明ピクセルを持つ画像をサポートしており、これは他の画像フォーマットがほとんど提供しない機能です。また、非常によく理解されたフォーマットでもあり、今日のほとんどの画像プログラムや Web ブラウザで利用できます。
ただし、一部の Web ブラウザは透明 PNG 画像を正しく扱いません(特に Microsoft Internet Explorer v6)。そのため、私は Web 上の画像には一般に JPEG と GIF フォーマットを使い、半透明ピクセルを持つ画像を生成するときや、後の例で正確な色が必要なときにのみ PNG フォーマットを使います。
IE v6 ブラウザで PNG 画像を表示させるため、複雑な JavaScript を用いた特別な「スタイルシート」を使っています。これについては IE 向けの透明 PNG を参照してください。技術的には、これは ImageMagick ではなく IE だけの問題です。
画面への画像表示
画像を画面に表示する際にも表示の問題が起こりえます。そのため、画像の下に「checkerboard(市松模様)」パターンを敷き詰め、透明・半透明のピクセルを際立たせる、次のようなコマンドの使用をお勧めします。
magick composite -compose Dst_Over -tile pattern:checkerboard image.png x:
上の例で表示されている画像は、シェルスクリプトで生成した特別な PNG フォーマットの テスト画像 です。通常、このコマンドは結果をこのような Web ページ上ではなく、あなたのディスプレイへ出力します。
よく見ると、半透明の色を通して市松模様が見えます。しかし画像全体としては完全に不透明です。そのため、この技法はすべてのディスプレイ・Web ブラウザ・画像ビューアで機能するはずです。
IM v6.0.2 以降、「magick display」プログラムはこれに似たことを自動的に行います。ただし、カラーテーブルを使う画像(つまり GIF)はこの方式では扱わないようです。上記のように「x:」出力画像フォーマットを使うと、画像を保存せずに直接画面へ表示できます。詳しくは 出力表示の表示 を参照してください。
フォントの利用
これらの例で使うフォントは、長年見つけて自分用に保存してきた TrueType フォントの小さなコレクションのものです。一部は著作権で保護されているため、オンラインで公開できません。
ただし、お手元にある別のフォントで代用していただくのは歓迎です。例は、システム上で利用可能な任意の適切なフォントで(画像サイズの多少の変更を伴いつつ)動作するはずです。Microsoft の「Arial」フォント、あるいは「Times-BoldItalic」でも、たいていのシステムで動くでしょう。
お使いの IM のバージョンで現在利用可能なフォントを確認するには、次のコマンドを実行します…
magick -list font
警告: 要求されたフォントが見つからない場合、ImageMagick は以前、既定フォント(通常は Arial か Times)を黙って代用していました。今でもそうしますが、警告が出るようになりました。意図したフォントであって既定フォントではないことを確認するため、事前にフォントをテストしてください。
私の Linux システムでは、特別な Perl スクリプト「[**imagick_type_gen**](../static/img/scripts/imagick_type_gen)」を使って、ホームディレクトリの「.magick」サブディレクトリに保存する「type.xml」ファイルを生成しています。ImageMagick は、XML 形式のフォント一覧を含むそのファイルを使ってフォントを探します。このスクリプトはシステム上で利用可能なすべてのフォントを「locate」し(新しいフォントを追加したばかりなら先に「updatedb」を実行)、記述します。この設定により、使いたいフォント名を指定するだけでよく、特定のフォントファイルへのフルパスは不要になります。
例えば…
# 次のコマンドを使う代わりに…
magick -font $HOME/lib/font/truetype/favorite/candice.ttf \
-pointsize 72 label:Anthony anthony.gif
# より簡単なフォントラベルを使える…
magick -font Candice -pointsize 72 label:Anthony anthony.gif
IM v6.1.2-3 より前では、「
type.xml」ファイルは「type.mgk」という名前でした。それより古い IM をお使いの場合はご注意ください。
これらの IM 例で使われるフォントは、例フォントのモンタージュ例 に一覧されています。私の個人的なお気に入りは Candice なので、かなり頻繁に使われています。
「
Candice」フォントや、私が使う他のフォントが気に入ったら、Free Fonts や 1001 Fonts .com から入手してください。
例ページの更新
これらの例ページは継続的な改善のサイクルの中にあります。一般に、関心が別のことに向くと、長期間ページへの追加が止まることがあります。
これらの例はしばしば IM の最新ベータ版で再構築され、各バージョンの IM で一般リリース前に現れうる変更やバグを私が確認できるようにしています。ただし、示されている例画像は、与えられた IM コマンドが私のシステムで生成したものです。もし違う結果が出るなら、あなたの IM はおそらくずっと古いバージョン(古いバグ入り)か、正しくインストールされていないかのどちらかです。
なお、私へのメールや、ディスカッション・フォーラム での ImageMagick の議論は、概してこれらの例への新しい例や節全体の追加につながります。議論が多いほど、例は良くなります。
IM で何か面白いことをしているなら、ぜひ共有して、あなたの技法の例を IM コミュニティの他の人々に提供させてください。IM 活用における最大級の進歩のいくつかは、あなたのようなユーザーから生まれてきました。
特別な感謝
特別な感謝を Cristy に捧げます。彼は何ヶ月もかけて、アップグレード・バグ修正に休みなく取り組み、私の突飛な提案に付き合ってくれました…とりわけコマンドライン処理・括弧・画像シーケンス演算子・GIF アニメーション処理に関する私の大きな提案について。
彼はバージョン7 を、入手可能な最良かつ最先端のコマンドライン画像処理プログラムにする見事な仕事をしてくれました。ほとんどのユーザーはそれに感謝を示さないでしょうが、私は彼が IM に注いだ努力を確かに高く評価しています。
JPEG フォーマットとライブラリ、アフィン行列演算子、そして Magick Vector Graphics 全般に関する議論で大いに助けてくれた Gabe Schaffer にも感謝します。
PNG コーダーモジュールを書き、減色とディザリングに関心を持っていた Glenn Randers-Pehrson にも。彼は IM に「halftone」ディザリングを最初に追加し、私が後にそれを改訂・拡張して、順序ディザ設定ファイルに新しいディザを加えました。
そして最後に、概して IM ユーザーフォーラム に潜んでいる、問題・提案・解決策を持つ膨大な数の人々に感謝します。その多くは今や、IM Examples 全体を通じてアイデアや提案の貢献者として名前を連ねています。
フォーラムで定期的に質問に答えてくれる人々にも感謝します。例えば「Bonzo」と、PHP スクリプトから IM コマンドを使う方法を詳述する彼の Web サイト RubbleWebs。また「scri8e」と、きらめきや星の扱いに関する彼の Web サイト Moons Stars。Pete「el_supremo」にも感謝を。
Fred Weinhaus には特別な感謝を捧げます。画像処理の黎明期からの研究者である彼は、一般画像歪み演算子 の初期実装で大きく助けてくれました。Fred の ImageMagick スクリプトは Fred's ImageMagick Site で見られ、しばしば将来の IM 追加機能の概念実証となっています。
デジタル画像処理の専門家である Nicolas Robidoux にも。彼は 楕円加重平均リサンプリング を作り直し、一般画像歪み の出力を大幅に改善してくれました。
そして最後に、フォーラムや Web 上で、何らかのプロジェクトの一部として使った IM コマンドを他の人に見せることを許してくれた、多くの ImageMagick ユーザーに。あなた方の発見を共有しようとする意欲と率直さは、皆称賛に値します。
それでは「能書きはこれくらいにして」、いくつか例を見に行きましょう。
![[IM Output]](../static/img/images/test.png)
![[IM Output]](../static/img/test_undertile.jpg)