インストール • 概要 • サンプルスクリプト • 画像の読み書き • 画像の操作 • 画像属性の設定 • 画像属性の取得 • 画像と再構成の比較 • 画像モンタージュの作成 • Blob の扱い • 画像画素への直接アクセス • その他のメソッド • 例外処理 • 定数
PerlMagick は ImageMagick へのオブジェクト指向の Perl インターフェイスです。このモジュールを使って、Perl スクリプト内から画像や画像シーケンスを読み込み・操作・書き出しできます。これは Web CGI スクリプトに非常に適しています。PerlMagick を正しくビルドするには、システムに ImageMagick 6.5.5 以上と Perl バージョン 5.005_02 以上がインストールされている必要があります。
PerlMagick の価値を示す有用なスクリプトが多数あります。MagickStudio で Web ベースの画像操作・変換ができますし、L-systems で数学的構成を使って植物の画像を作成したり、WebMagick Image Navigator でサムネイル画像のコレクションをたどって表示する画像を選んだりできます。
Web ブラウザから ImageMagick Studio で PerlMagick を試せます。あるいは、選り抜きの PerlMagick 関数の 例 を見られます。
インストール
UNIX
PerlMagick はシステムの RPM リポジトリから入手できますか? たとえば私たちの CentOS システムでは、PerlMagick を次のようにインストールします。
yum install ImageMagick-perl
入手できない場合、ImageMagick ソース配布物から PerlMagick をインストールする必要があります。最新の ソース リリースをダウンロードします。
次のコマンドで配布物を展開します。
tar xvzf ImageMagick.tar.gz
次に ImageMagick を構成・コンパイルします。
cd ImageMagick-7.1.2-25
./configure -with-perl
make
ImageMagick / PerlMagick が問題なく構成・コンパイルされたら、システムにインストールする準備ができています。インストールには管理者権限が必要です。インストールするには次を入力します。
sudo make install
動的リンカの実行時バインディングを構成する必要があるかもしれません。
sudo ldconfig /usr/local/lib
最後に、PerlMagick のインストールが正しく機能したか確認するため、次を入力します。
perl -MImage::Magick -le 'print Image::Magick->QuantumDepth'
おめでとうございます。動作する ImageMagick 配布物が手に入り、PerlMagick を使って画像を 変換・合成・編集 する準備ができました。
Windows XP / Windows 2000
システムに ImageMagick がすでにインストールされている必要があります。また、Windows 2000 用の ImageMagick ソース配布物が必要です。Visual C++ または J++ 開発環境の nmake も必要です。\bin\IMagick.dll と \bin\X11.dll を、c:\perl\site\5.00502 などの動的ロードパス内のディレクトリへコピーします。
次に、次を入力します。
cd PerlMagick
perl Makefile.nt
nmake
nmake install
回帰テストの実行
正しいインストールを確認するには、次を入力します。
make test
Windows では nmake test を使います。PerlMagick が実行できる多くの関数を試すデモスクリプトがいくつかあります。
ビルドフォルダからテストを実行するには prove ユーティリティを使います。
prove --blib blib -I `pwd` -bv ./t/read.t
cd demo
make
これで Perl スクリプト内から PerlMagick メソッドを利用する準備ができました。
概要
PerlMagick メソッドを使いたいスクリプトはすべて、まず名前空間内にメソッドを定義し、画像オブジェクトをインスタンス化する必要があります。次のように行います。
use Image::Magick;
$image = Image::Magick->new;
PerlMagick は量子を認識します。画像オブジェクトをインスタンス化する際に特定の量子深度を要求できます。
use Image::Magick::Q16;
$image = Image::Magick::Q16->new;
new() メソッドは SetAttribute と同じパラメータを取ります。たとえば、
$image = Image::Magick->new(size=>'384x256');
次に画像または画像シーケンスを読み込み、操作し、表示または書き出したくなるでしょう。PerlMagick の入出力メソッドは「画像の読み書き」で定義されています。画像の読み書きの方法に影響するメソッドは「画像属性の設定」を参照してください。画像を変換するメソッドの一覧は「画像の操作」を参照してください。「画像属性の取得」では画像の属性を取得する方法を説明します。背景上にサムネイルとして画像をタイル状に並べる詳細は「画像モンタージュの作成」を参照してください。最後に、上記のどのカテゴリにもうまく収まらないメソッドもあります。これらのメソッドの一覧は「その他のメソッド」を参照してください。
PerlMagick オブジェクトを使い終えたら破棄を検討すべきです。画像シーケンス内の各画像は仮想メモリに格納されます。これは潜在的に数メビバイトのメモリに達することがあります。PerlMagick オブジェクトを破棄すると、メモリは他の Perl メソッドが使えるよう返却されます。オブジェクトを破棄する推奨方法は undef です。
undef $image;
Image::Magick オブジェクトを保持しつつすべての画像を削除するには次を使います。
@$image = ();
そして、マルチイメージシーケンスから単一の画像を削除するには次を使います。
undef $image->[$x];
次のセクションでは、さまざまな PerlMagick メソッドを使って画像シーケンスを操作する方法を示します。
一部の PerlMagick メソッドは Ghostscript などの外部プログラムを必要とします。正しく動作するには PATH 環境変数に明示的なパスが必要なことがあります。たとえば(Linux では)、
$ENV{PATH}' . "='/../bin:/usr/bin:/usr/local/bin';
サンプルスクリプト
手始めとなるサンプルスクリプトを示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
このスクリプトは 3 つの画像を読み込み、切り抜き、単一の画像を GIF アニメーションシーケンスとして書き出します。多くの場合、シーケンスの個々の画像へアクセスしたいでしょう。次の例はその方法を示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
中央に赤い画素を持つ 100x100 ピクセルの白いキャンバスから始めたいとします。次を試します。
$image = Image::Magick->new;
$image->Set(size=>'100x100');
$image->ReadImage('canvas:white');
$image->Set('pixel[49,49]'=>'red');
ここでは (1,1) の赤成分の強度を半分に減らします。
@pixels = $image->GetPixel(x=>1,y=>1);
$pixels[0]*=0.5;
$image->SetPixel(x=>1,y=>1,color=>\@pixels);
あるいはカラー画像をグレースケールへ変換したいとします。
$image->Quantize(colorspace=>'gray');
台北の TrueType フォントで画像に注釈を付けてみましょう。
$text = 'Works like magick!';
$image->Annotate(font=>'kai.ttf', pointsize=>40, fill=>'green', text=>$text);
画像からすべての画素強度を抽出して STDOUT へ書き出したいかもしれません。
@pixels = $image->GetPixels(map=>'I', height=>$height, width=>$width, normalize=>true);
binmode STDOUT;
print pack('B*',join('',@pixels));
PerlMagick オブジェクトでできる他の巧妙なことには次があります。
$i = $#$p"+1"; # オブジェクト p に関連付けられた画像数を返す
push(@$q, @$p); # オブジェクト p の画像をオブジェクト q へプッシュする
@$p = (); # 画像を削除するがオブジェクト p は削除しない
$p->Convolve([1, 2, 1, 2, 4, 2, 1, 2, 1]); # 3x3 ガウシアンカーネル
画像の読み書き
以下のメソッドを使って、画像または画像シーケンスを読み込む・書き出す・表示します。
| 読み書きメソッド メソッド | パラメータ | 戻り値 | 説明 |
|---|---|---|---|
| Read | one or more filenames | the number of images read | 画像または画像シーケンスを読み込む |
| Write | filename | the number of images written | 画像または画像シーケンスを書き出す |
| Display | server name | the number of images displayed | 画像または画像シーケンスを X サーバーへ表示する |
| Animate | server name | the number of images animated | 画像シーケンスを X サーバーへアニメーション表示する |
便宜上、Write()・Display()・Animate() メソッドは SetAttribute が知っている任意のパラメータを取れます。たとえば、
$image->Write(filename=>'image.png', compression=>'None');
標準入力から読み込むには Read() メソッドに、標準出力へ書き出すには Write() メソッドに、ファイル名として - を使います。
binmode STDOUT;
$image->Write('png:-');
PERL ファイルハンドルから GIF 形式の画像を読み込むには次を使います。
$image = Image::Magick->new;
open(IMAGE, 'image.gif');
$image->Read(file=>\*IMAGE);
close(IMAGE);
PERL ファイルハンドルへ PNG 形式の画像を書き出すには次を使います。
$filename = "image.png";
open(IMAGE, ">$filename");
$image->Write(file=>\*IMAGE, filename=>$filename);
close(IMAGE);
なお、Perl ファイルハンドルからの読み書きは、ImageMagick と ActiveState Perl 配布物の間で C ランタイムライブラリのバージョンが異なる場合や、DLL の 1 つが /MT オプションでリンクされている場合、Windows で失敗することがあります。説明は Potential Errors Passing CRT Objects Across DLL Boundaries を参照してください。
ファイル名に %0Nd・%0No・%0Nx が現れると、printf 書式指定として解釈され、その指定はシーン番号の指定された 10 進・8 進・16 進エンコードに置き換えられます。たとえば、
image%03d.miff
はファイル image000.miff・image001.miff などを変換します。
任意のメソッド名に Image を追加できます。たとえば ReadImage() は Read() メソッドの別名です。
画像の操作
たとえば ReadImage() メソッドで画像を作成したら、それに対して操作したくなるでしょう。以下は PerlMagick で利用できるすべての画像操作メソッドの一覧です。選り抜きの PerlMagick メソッドの 例 があります。画像操作メソッドの呼び出し例を示します。
$image->Crop(geometry=>'100x100+10+20');
$image->[$x]->Frame("100x200");
そして、呼び出せる他の画像操作メソッドの一覧を示します。
| 画像操作メソッド メソッド | パラメータ | 説明 |
|---|---|---|
| AdaptiveBlur | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 指定の半径と標準偏差(sigma)のガウシアン演算子で画像を適応的にぼかす。エッジ付近では効果を弱める。 |
| AdaptiveResize | geometry=>geometry , width=>integer , height=>integer , filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>double , blur=>double | データ依存の三角形分割を使って画像を適応的にリサイズする。ぼかしには blur > 1、シャープには < 1 を指定。 |
| AdaptiveSharpen | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 指定の半径と標準偏差(sigma)のガウシアン演算子で画像を適応的にシャープにする。エッジ付近で効果を強める。 |
| AdaptiveThreshold | geometry=>geometry , width=>integer , height=>integer , bias=>double | 局所適応しきい値処理。 |
| AddNoise | noise=>{Uniform, Gaussian, Multiplicative, Impulse, Laplacian, Poisson}, attenuate=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像にノイズを加える |
| AffineTransform | affine=>array of float values , translate=>float, float , scale=> float, float , rotate=>float , skewX=>float , skewY=>float , interpolate={Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor}, background=>color name | 画像をアフィン変換する |
| Affinity | image=>image-handle , method=>{None, FloydSteinberg, Riemersma} | この画像から特定の色セットを選ぶ |
| Annotate | text=>string , font=>string , family=>string , style=>{Normal, Italic, Oblique, Any}, stretch=>{Normal, UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, SemiExpanded, Expanded, ExtraExpanded, UltraExpanded}, weight=>integer , pointsize=>integer , density=>geometry , stroke=>color name , strokewidth=>integer , fill=>color name , undercolor=>color name , kerning=>float , geometry=>geometry , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, antialias=>{true, false}, x=>integer , y=>integer , affine=>array of float values , translate=>float, float , scale=>float, float , rotate=>float. skewX=>float , skewY=> float , align=>{Left, Center, Right}, encoding=>{UTF-8}, interline-spacing=>double , interword-spacing=>double , direction=>{right-to-left, left-to-right}, decorate=>{none, underline, overline, line-through}, word-break=>{normal, break-word} | 画像にテキストで注釈を付ける。テキストをレンダリングせずにフォントメトリクスを得るには QueryFontMetrics を参照。 |
| AutoGamma | channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像のガンマレベルを自動調整する |
| AutoLevel | channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像の色レベルを自動調整する |
| AutoOrient | 画像の向きを表示に適した向き(すなわち左上向き)に調整する | |
| AutoThreshold | method=>{Kapur, OTSU, Triangle} | 画像のしきい値処理を自動的に行う |
| BilateralSmoothing | geometry=>geometry , width=>integer , height=>integer , intensity-sigma=>double , spatial-sigma=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 非線形・エッジ保存・ノイズ低減の平滑化フィルタ。各画素の強度を近傍画素の強度の加重平均で置き換える。重みはガウス分布に基づき、画素のユークリッド距離だけでなく放射輝度の差(色強度・深度距離など)にも依存するため、鋭いエッジを保つ。intensity と spatial の sigma のデフォルトはそれぞれ直径の 2 倍と 0.5 倍。 |
| BlackThreshold | threshold=>color , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | しきい値強度未満のすべての画素を黒にする |
| BlueShift | factor=>double , | 月光下の夜のシーンをシミュレートする。factor 1.5 から始めるとよい。 |
| Blur | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 指定の半径と標準偏差(sigma)のガウシアン演算子で画像ノイズと詳細レベルを低減する。 |
| Border | geometry=>geometry , width=>integer , height=>integer , bordercolor=>color name , compose=>{Undefined, Add, Atop, Blend, Bumpmap, Clear, ColorBurn, ColorDodge, Colorize, CopyBlack, CopyBlue, CopyCMYK, Cyan, CopyGreen, Copy, CopyMagenta, CopyAlpha, CopyRed, RGB, CopyYellow, Darken, Dst, Difference, Displace, Dissolve, DstAtop, DstIn, DstOut, DstOver, Dst, Exclusion, HardLight, Hue, In, Lighten, Luminize, Minus, Modulate, Multiply, None, Out, Overlay, Over, Plus, ReplaceCompositeOp, Saturate, Screen, SoftLight, Src, SrcAtop, SrcIn, SrcOut, SrcOver, Src, Subtract, Threshold, Xor }, | 画像を色の境界で囲む |
| CannyEdge | geometry=>geometry , radius=>double , sigma=>double , 'lower-percent'=>double , 'upper-percent'=>double | 多段アルゴリズムで画像中の広範囲のエッジを検出する(例: CannyEdge('0x1+10%+40%'))。 |
| Charcoal | geometry=>geometry , radius=>double , sigma=>double | 木炭画をシミュレートする |
| Chop | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} | 画像を切り取る |
| CLAHE | geometry=>geometry , width=>integer , height=>integer , number-bins=>integer , clip-limit=>double | コントラスト制限付き適応ヒストグラム均等化。width・height で画像をタイルに分割。number-bins はタイルあたりのヒストグラムビン数(最小 2、最大 256)。clip-limit は局所的なコントラスト変化の制限値。2〜3 が手始めに良い。 |
| Clamp | channel=>{Red, RGB, All, etc.} | 値がゼロ未満の各画素をゼロに、量子化レンジを超える画素を量子化レンジ(例: 65535)に設定し、それ以外は画素値を変更しない。 |
| Clip | id=>name , inside=>{true, false} , | 8BIM プロファイルの名前付きパスに沿って適用する。 |
| ClipMask | mask=>image-handle | 画像マスクで定義されるとおりに画像をクリップする |
| Clut | image=>image-handle , interpolate={Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor}, channel=>{Red, RGB, All, etc.} | 画像シーケンスにカラールックアップテーブルを適用する |
| Color | color=>color name | 画像全体をこの色に設定する。 |
| ColorDecisionList | filename=>string , | カラーディシジョンリストで色補正する。 |
| Colorize | fill=>color name , blend=>string | fill 色で画像を着色する |
| ColorMatrix | matrix=>array of float values | 画像に色補正を適用する。可変サイズの行列を使えるが、通常 RGBA 画像には 5x5、CMYKA には 6x6 を使う。オフセットには 6x6 行列が必要(最後の列を正規化値で埋める)。 |
| Colorspace | colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YCC, YIQ, YPbPr, YUV, CMYK} | 画像のカラースペースを設定する |
| Comment | string | 画像にコメントを追加する |
| ColorThreshold | start-color=>color , stop-color=>color , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | しきい値強度未満のすべての画素を黒にする |
| CompareLayers | method=>{any, clear, overlay} | シーケンス内の各画像を次の画像と比較し、検出した画素差の最小境界領域を返す。画像は同じサイズである必要はないが、すべての画像が coalesce されている(同じサイズで平坦化されたキャンバス上にあり、特定フレームの見え方を正確に表す)のが最良。 |
| Composite | image=>image-handle , compose=>{Undefined, Add, Atop, Blend, Bumpmap, Clear, ColorBurn, ColorDodge, Colorize, CopyBlack, CopyBlue, CopyCMYK, Cyan, CopyGreen, Copy, CopyMagenta, CopyAlpha, CopyRed, RGB, CopyYellow, Darken, Dst, Difference, Displace, Dissolve, DstAtop, DstIn, DstOut, DstOver, Dst, Exclusion, HardLight, Hue, In, Lighten, Luminize, Minus, Modulate, Multiply, None, Out, Overlay, Over, Plus, ReplaceCompositeOp, Saturate, Screen, SoftLight, Src, SrcAtop, SrcIn, SrcOut, SrcOver, Src, Subtract, Threshold, Xor }, mask=>image-handle , geometry=>geometry , x=>integer , y=>integer , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, opacity=>integer , tile=>{True, False}, rotate=>double , color=>color name , blend=>geometry , interpolate=>{undefined, average, bicubic, bilinear, filter, integer, mesh, nearest-neighbor, spline}, clip-to-self=>{True, False} | ある画像を別の画像へ合成する。rotate パラメータは tile パラメータと併用する。 |
| ConnectedComponents | connectivity=>integer , | 連結成分に一意なラベルを付ける。4 方向または 8 方向の連結性を選ぶ。 |
| Contrast | sharpen=>{True, False} | 画像のコントラストを強調または低減する |
| ContrastStretch | levels=>string , 'black-point'=>double , 'white-point'=>double , channel=>{Red, RGB, All, etc.} | 強度値の範囲を「ストレッチ」して画像のコントラストを改善する |
| Convolve | coefficients=>array of float values , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, bias=>double | 画像に畳み込みカーネルを適用する。カーネル次数 order に対し order*order 個の浮動小数点値を与える(例: 3x3 なら 9 値)。 |
| CopyPixels | image=>image-handle , geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , offset=>geometry , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, dx=>integer , dy=>integer | widthxheight+x+y で定義される画像の画素を、オフセット +dx,+dy の画像へコピーする。 |
| Crop | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , fuzz=>double , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} | 画像を切り抜く |
| CycleColormap | amount=>integer | 画像のカラーマップを amount だけ変位させる |
| Decipher | passphrase=>string | 暗号画素を平文画素へ変換する |
| Deconstruct | 画像シーケンスを構成要素へ分解する | |
| Deskew | geometry=>string ,threshold=>double | 画像をまっすぐにする |
| Despeckle | 画像内のスペックルを低減する | |
| Difference | image=>image-handle | 2 つの画像間の差分メトリクスを計算する |
| Distort | points=>array of float values , method=>{Affine, AffineProjection, ScaleRotateTranslate, SRT, Perspective, PerspectiveProjection, BilinearForward, BilinearReverse, Polynomial, Arc, Polar, DePolar, Barrel, BarrelInverse, Shepards, Resize}, 'virtual-pixel'=>{Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White}, 'best-fit'=>{True, False} | 画像を歪める |
| Draw | primitive=>{point, line, rectangle, arc, ellipse, circle, path, polyline, polygon, bezier, color, matte, text, @filename}, points=>string , method=>{Point, Replace, Floodfill, FillToBorder, Reset} , stroke=>color name , fill=>color name , font=>string , pointsize=>integer , strokewidth=>float , antialias=>{true, false}, bordercolor=>color name , x=>float , y=>float , dash-offset=>float , dash-pattern=>array of float values , affine=>array of float values , translate=>float, float , scale=>float, float , rotate=>float , skewX=>float , skewY=>float , interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline}, kerning=>float , text=>string , vector-graphics=>string , interline-spacing=>double , interword-spacing=>double , direction=>{right-to-left, left-to-right}, word-break=>{normal, break-word} | 1 つ以上のグラフィックプリミティブで画像に注釈を付ける。 |
| Encipher | passphrase=>string | 平文画素を暗号画素へ変換する |
| Edge | radius=>double | 指定の半径の畳み込みフィルタで画像内のエッジを強調する。 |
| Emboss | geometry=>geometry , radius=>double , sigma=>double | 指定の半径と標準偏差(sigma)の畳み込みフィルタで画像をエンボス加工する。 |
| Enhance | デジタルフィルタを適用してノイズの多い画像を強調する | |
| Equalize | 画像にヒストグラム均等化を行う | |
| Extent | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , fuzz=>double , background=>color name , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} | 画像サイズを設定する |
| Evaluate | value=>double , operator=>{Add, And, Divide, LeftShift, Max, Min, Multiply, Or, Rightshift, RMS, Subtract, Xor} , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像に算術・関係・論理式を適用する |
| Filter | kernel=>string , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, bias=>double | 画像に畳み込みカーネルを適用する。 |
| Flip | 画像のスキャンラインを垂直方向に反転する | |
| Flop | 画像のスキャンラインを水平方向に反転する | |
| FloodfillPaint | geometry=>geometry , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, x=>integer , y=>integer , fill=>color name , bordercolor=>color name , fuzz=>double , invert=>{True, False} | 対象画素の色に一致し、かつ隣接する任意の画素の色値を変更する。境界色を指定した場合、その色でない隣接画素の色値が変更される。 |
| ForwardFourierTransform | magnitude=>{True, False} | 順離散フーリエ変換(DFT)を実装する |
| Frame | geometry=>geometry , width=>integer , height=>integer , inner=>integer , outer=>integer , fill=>color name , compose=>{Undefined, Add, Atop, Blend, Bumpmap, Clear, ColorBurn, ColorDodge, Colorize, CopyBlack, CopyBlue, CopyCMYK, Cyan, CopyGreen, Copy, CopyMagenta, CopyAlpha, CopyRed, RGB, CopyYellow, Darken, Dst, Difference, Displace, Dissolve, DstAtop, DstIn, DstOut, DstOver, Dst, Exclusion, HardLight, Hue, In, Lighten, Luminize, Minus, Modulate, Multiply, None, Out, Overlay, Over, Plus, ReplaceCompositeOp, Saturate, Screen, SoftLight, Src, SrcAtop, SrcIn, SrcOut, SrcOver, Src, Subtract, Threshold, Xor }, | 画像を装飾的な境界で囲む |
| Function | parameters=>array of float values , function=>{Sin}, 'virtual-pixel'=>{Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White} | 画像に関数を適用する |
| Gamma | gamma=>string , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像をガンマ補正する |
| GaussianBlur | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 指定の半径と標準偏差(sigma)のガウシアン演算子で画像ノイズと詳細レベルを低減する。 |
| GetPixel | geometry=>geometry , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, normalize=>{true, false}, x=>integer , y=>integer | 単一の画素を取得する。デフォルトでは正規化された画素値を返す。 |
| GetPixels | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , map=>string , normalize=>{true, false} | map(例: "RGB"・"RGBA" など)で定義される画像画素を取得する。デフォルトでは正規化されていない画素値を返す。 |
| Grayscale | channel=>{Average, Brightness, Lightness, Rec601Luma, Rec601Luminance, Rec709Luma, Rec709Luminance, RMS} | 画像をグレースケールへ変換する |
| HaldClut | image=>image-handle , channel=>{Red, RGB, All, etc.} | 画像シーケンスに Hald カラールックアップテーブルを適用する |
| HoughLine | geometry=>geometry , width=>double , height=>double , threshold=>double | 画像内の線を識別する(例: HoughLine('9x9+195'))。 |
| Identify | file=>file , features=>distance , moments=>{True, False}, unique=>{True, False} | 画像の属性を識別する |
| Implode | amount=>double , interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} | 中心に向かって画像画素を破裂(implode)させる |
| Integral | 画像内の値(画素値)の合計を計算する。 | |
| InverseDiscreteFourierTransform | magnitude=>{True, False} | 逆離散フーリエ変換(DFT)を実装する |
| Kmeans | geometry=>geometry , 'colors'=>double , 'iterations'=>double , 'tolerance'=>double | K 平均法による減色。 |
| Kuwahara | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | エッジ保存ノイズ低減フィルタ |
| Label | string | 画像にラベルを割り当てる |
| Layers | method=>{coalesce, compare-any, compare-clear, compare-over, composite, dispose, flatten, merge, mosaic, optimize, optimize-image, optimize-plus, optimize-trans, remove-dups, remove-zero}, compose=>{Undefined, Add, Atop, Blend, Bumpmap, Clear, ColorBurn, ColorDodge, Colorize, CopyBlack, CopyBlue, CopyCMYK, Cyan, CopyGreen, Copy, CopyMagenta, CopyAlpha, CopyRed, RGB, CopyYellow, Darken, Dst, Difference, Displace, Dissolve, DstAtop, DstIn, DstOut, DstOver, Dst, Exclusion, HardLight, Hue, In, Lighten, LinearLight, Luminize, Minus, Modulate, Multiply, None, Out, Overlay, Over, Plus, ReplaceCompositeOp, Saturate, Screen, SoftLight, Src, SrcAtop, SrcIn, SrcOut, SrcOver, Src, Subtract, Threshold, Xor }, dither=>{true, false} | 各画像をシーケンス内の前画像の GIF dispose 形式と比較する。これにより、アニメーションの結果を保ちつつ各フレームを置き換える最小の切り抜き画像を選ぼうとする。 |
| Level | levels=>string , 'black-point'=>double , 'gamma'=>double , 'white-point'=>double , channel=>{Red, RGB, All, etc.} | 画像コントラストのレベルを調整する |
| LevelColors | invert=>>{True, False}, 'black-point'=>string , 'white-point'=>string , channel=>{Red, RGB, All, etc.} | 指定の色で画像をレベル調整する |
| LinearStretch | levels=>string , 'black-point'=>double , 'white-point'=>double | 彩度を伴う線形ストレッチ |
| LiquidResize | geometry=>geometry , width=>integer , height=>integer , delta-x=>double , rigidity=>double | シームカービングで画像をリスケールする。 |
| Magnify | ピクセルアートスケーリングで画像サイズを 2 倍にする | |
| Mask | mask=>image-handle | マスクで定義されるとおりに画像画素を合成する |
| MatteFloodfill | geometry=>geometry , x=>integer , y=>integer , matte=>integer , bordercolor=>color name , fuzz=>double , invert=>{True, False} | 対象画素の色に一致し、かつ隣接する任意の画素の matte 値を変更する。境界色を指定した場合、その色でない隣接画素の matte 値が変更される。 |
| MeanShift | geometry=>geometry , width=>double , height=>double , distance=>double | 画像内の任意形状のクラスタを描出する(例: MeanShift('7x7+10%'))。 |
| MedianFilter | geometry=>geometry , width=>integer , height=>integer , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 各画素を近傍の中央値強度画素で置き換える。 |
| Minify | 画像サイズを半分にする | |
| Mode | geometry=>geometry , width=>integer , height=>integer , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 各画素を近傍の最頻色にする。 |
| Modulate | factor=>geometry , brightness=>double , saturation=>double , hue=>double , lightness=>double , whiteness=>double , blackness=>double | 指定のパーセントで画像の輝度・彩度・色相を変える |
| Morphology | kernel=>string , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, iterations=>integer | 画像にモルフォロジーメソッドを適用する。 |
| MotionBlur | geometry=>geometry , radius=>double , sigma=>double , angle=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 動きの効果をシミュレートするため、指定の角度で指定の半径と標準偏差(sigma)のガウシアン演算子で画像ノイズと詳細レベルを低減する |
| Negate | gray=>{True, False}, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 各画素を補色で置き換える(白は黒に、黄は青になど) |
| Normalize | 画像を色値の全範囲に広がるよう変換する | |
| OilPaint | radius=>integer | 油絵をシミュレートする |
| Opaque | color=>color name , fill=>color name , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, invert=>{True, False} | 画像内でこの色を fill 色へ変更する |
| OrderedDither | threshold=>{threshold, checks, o2x2, o3x3, o4x4, o8x8, h4x4a, h6x6a, h8x8a, h4x4o, h6x6o, h8x8o, h16x16o, hlines6x4}, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像を組織的ディザリングする |
| Perceptible | epsilon=>double , channel=>{Red, RGB, All, etc.} | set each pixel whose value is less than |
| Polaroid | caption=>string , angle=>double , pointsize=>double , font=>string , stroke=> color name , strokewidth=>integer , fill=>color name , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, background=>color name | ポラロイド写真をシミュレートする。 |
| Posterize | levels=>integer , dither=>{True, False} | 画像を限られた色レベル数へ削減する |
| Profile | name=>string , profile=>blob , rendering-intent=>{Undefined, Saturation, Perceptual, Absolute, Relative}, black-point-compensation=>{True, False} | ICC または IPTC 画像プロファイルを追加・削除する。name は正式名(例: ICC)またはファイル名。プロファイルを削除するには profile を '' に設定する |
| Quantize | colors=>integer , colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YIQ, YPbPr, YUV, CMYK, sRGB, HSL, HSB}, treedepth=> integer , dither=>{True, False}, dither-method=>{Riemersma, Floyd-Steinberg}, measure_error=>{True, False}, global_colormap=>{True, False}, transparent-color=>color | 画像の希望の色数 |
| Raise | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , raise=>{True, False} | 3D 効果を作るため画像のエッジを明るく/暗くする |
| RangeThreshold | geometry=>geometry , 'low-black'=>double , 'low-white'=>double , 'high-white'=>double , 'high-black'=>double | ソフトとハードの画像しきい値処理を組み合わせる。 |
| ReduceNoise | geometry=>geometry , width=>integer , height=>integer , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | ノイズピーク除去フィルタで画像のノイズを低減する |
| Remap | image=>image-handle , dither=>{true, false}, dither-method=>{Riemersma, Floyd-Steinberg} | 参照画像から最も近い色で画像の色を置き換える。 |
| Resample | density=>geometry , x=>double , y=>double , filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>double | 希望の解像度へ画像を再サンプリングする。ぼかしには blur > 1、シャープには < 1 を指定 |
| Resize | geometry=>geometry , width=>integer , height=>integer , filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>double , blur=>double | 希望のサイズへ画像をスケールする。ぼかしには blur > 1、シャープには < 1 を指定 |
| Roll | geometry=>geometry , x=>integer , y=>integer | 画像を垂直または水平にロールする |
| Rotate | degrees=>double , background=>color name | 画像を回転する |
| RotationalBlur | geometry=>geometry , angle=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像を放射状にぼかす。 |
| Sample | geometry=>geometry , width=>integer , height=>integer | 画素サンプリングで画像をスケールする。 |
| Scale | geometry=>geometry , width=>integer , height=>integer | 希望のサイズへ画像をスケールする |
| Segment | colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YCC, YIQ, YPbPr, YUV, CMYK}, verbose={True, False}, cluster-threshold=>double , smoothing-threshold=double | 色成分のヒストグラムを分析し、均質な単位を識別して画像をセグメント化する |
| SelectiveBlur | geometry=>geometry , radius=>double , sigma=>double , threshold=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | コントラストしきい値内の画素を選択的にぼかす。 |
| Separate | channel=>{Red, RGB, All, etc.} | 画像からチャンネルをグレースケール画像として分離する |
| Shade | geometry=>geometry , azimuth=>double , elevation=>double , gray=>{true, false} | 遠方の光源を使って画像に陰影を付ける |
| SetPixel | geometry=>geometry , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, color=>array of float values , x=>integer , y=>integer , color=>array of float values | 単一の画素の値を設定する。正規化された画素値が期待される。 |
| SetPixels | geometry=>geometry , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, color=>array of float values , width=>integer , height=>integer , x=>integer , y=>integer , color=>array of float values | 1 つ以上の画素の値を設定する。正規化された画素値が期待される。 |
| Shadow | geometry=>geometry , opacity=>double , sigma=>double , x=>integer , y=>integer | 画像の影をシミュレートする |
| Sharpen | geometry=>geometry , radius=>double , sigma=>double , bias=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 指定の半径と標準偏差(sigma)のガウシアン演算子で画像をシャープにする。 |
| Shave | geometry=>geometry , width=>integer , height=>integer | 画像のエッジから画素を削る |
| Shear | geometry=>geometry , x=>double , y=>double fill=>color name | 正または負のせん断角で X または Y 軸に沿って画像をせん断する |
| SigmoidalContrast | geometry=>string , 'contrast'=>double , 'mid-point'=>double channel=>{Red, RGB, All, etc.}, sharpen=>{True, False} | シグモイド非線形コントラスト制御。ハイライトや影を飽和させずにシグモイド伝達関数で画像のコントラストを上げる。contrast はコントラストをどれだけ上げるか(0 はなし、3 が典型、20 は大きい)、mid-point は結果画像で中間調がどこに落ちるか(0 は白、50% は中間グレー、100% は黒)。コントラストを下げるには sharpen を False にする。 |
| Signature | 画像の画素ストリームの SHA-256 メッセージダイジェストを生成する | |
| Sketch | geometry=>geometry , radius=>double , sigma=>double , angle=>double | 指定の角度で指定の半径と標準偏差(sigma)のガウシアン演算子で画像をスケッチ風にする |
| Solarize | geometry=>string , threshold=>double , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | しきい値レベルを超えるすべての画素を反転する |
| SortPixels | 各スキャンライン内の画素を強度の昇順にソートする。 | |
| SparseColor | points=>array of float values , method=>{Barycentric, Bilinear, Shepards, Voronoi}, 'virtual-pixel'=>{Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White} | 与えられた点の周りで画像の色を補間する |
| Splice | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer , fuzz=>double , background=>color name , gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} | 画像にスプライスを挿入する |
| Spread | radius=>double , interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} | 画像画素をランダムな量だけ変位させる |
| Statistic | geometry=>geometry , width=>integer , height=>integer , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, type=>{Contrast, Median, Mode, Mean, Maximum, Minimum, ReduceNoise, RMS} | 各画素を近傍からの対応する統計量で置き換える。 |
| Stegano | image=>image-handle , offset=>integer | 画像内にデジタル透かしを隠す |
| Stereo | image=>image-handle , x=>integer , y=>integer | 2 つの画像を合成し、ステレオペアの左右画像を合成した単一画像を生成する |
| Strip | 画像からすべてのプロファイルとコメントを削除する。 | |
| Swirl | degrees=>double , interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} | 中心の周りに画像画素を渦巻かせる |
| Texture | texture=>image-handle | 画像背景にタイル状に敷くテクスチャの名前 |
| Thumbnail | geometry=>geometry , width=>integer , height=>integer | 画像のサイズを指定の寸法へ変更し、関連プロファイルを削除する。 |
| Threshold | threshold=>string , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | 画像をしきい値処理する |
| Tint | fill=>color name , blend=>string | fill 色で画像を色合い付けする。 |
| Transparent | color=>color name , invert=>{True, False} | 画像内でこの色を透明にする |
| Transpose | 画像を垂直方向に反転し 90 度回転する | |
| Transverse | 画像を水平方向に反転し 270 度回転する | |
| Trim | 画像から背景色のエッジを削除する | |
| UnsharpMask | geometry=>geometry , radius=>double , sigma=>double , gain=>double , threshold=>double | アンシャープマスクアルゴリズムで画像をシャープにする。 |
| Vignette | geometry=>geometry , radius=>double , sigma=>double , x=>integer , y=>integer , background=>color name | ビネットスタイルで画像のエッジをオフセットする |
| Wave | geometry=>geometry , amplitude=>double , wavelength=>double , interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} | サイン波に沿って画像を変形する |
| WaveDenoise | geometry=>geometry , threshold=>double , threshold=>double | ウェーブレット変換で画像からノイズを除去する |
| WhiteBalance | LAB カラースペースでグレーワールド仮定に従って画像にホワイトバランスを適用する。 | |
| WhiteThreshold | threshold=>string , , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} | しきい値強度を超えるすべての画素を白にする |
なお、geometry パラメータは width と height パラメータの短縮形です(例: geometry=>'106x80' は width=>106, height=>80 と等価)。
Annotate() と Draw() の両方で @filename を指定できます。これはディスク上のファイルからテキストまたはグラフィックプリミティブの指示を読み込みます。たとえば、
image->Draw(fill=>'red', primitive=>'rectangle',
points=>'20,20 100,100 40,40 200,200 60,60 300,300');
は次と等価です。
$image->Draw(fill=>'red', primitive=>'@draw.txt');
ここで draw.txt は次を含むディスク上のファイルです。
rectangle 20, 20 100, 100
rectangle 40, 40 200, 200
rectangle 60, 60 300, 300
Annotate()・Comment()・Draw()・Label() メソッドの text パラメータには、以下の特殊な書式文字を埋め込むことで、画像のファイル名・タイプ・幅・高さなどの画像属性を含められます。
%b ファイルサイズ
%c コメント
%d ディレクトリ
%e ファイル名の拡張子
%f ファイル名
%g ページジオメトリ
%h 高さ
%i 入力ファイル名
%k 一意な色の数
%l ラベル
%m magick
%n シーン数
%o 出力ファイル名
%p ページ番号
%q 量子深度
%r 画像クラスとカラースペース
%s シーン番号
%t ディレクトリ・拡張子を除いたファイル名
%u 一意な一時ファイル名
%w 幅
%x x 解像度
%y y 解像度
%z 画像深度
%C 画像圧縮タイプ
%D 画像 dispose メソッド
%H ページ高さ
%Q 画像圧縮品質
%T 画像遅延
%W ページ幅
%X ページ x オフセット
%Y ページ y オフセット
%@ 境界ボックス
%# シグネチャ
%% パーセント記号
\n 改行
\r キャリッジリターン
たとえば、
text=>"%m:%f %wx%h"
は、タイトルが bird.miff で幅 512・高さ 480 の画像に対して MIFF:bird.miff 512x480 という注釈を生成します。
任意のメソッド名に Image を追加できます。たとえば TrimImage() は Trim() メソッドの別名です。
上記の属性のほとんどは magick に対応するものがあります。これらの属性のより詳細な説明はドキュメントを参照してください。
画像属性の設定
画像属性を設定するには Set() メソッドを使います。たとえば、
$image->Set(dither=>'True');
$image->[$x]->Set(delay=>3);
この例で 'True' を使い、本ドキュメントが '{True, False}' と記している箇所では、大文字小文字を区別しない文字列 'True'・'False' を使うか、整数 1・0 を使えます。
Boolean 属性に Get() を呼ぶと、Image::Magick は文字列ではなく 1 または 0 を返します。
そして、設定できるすべての画像属性の一覧を示します。
| 画像属性 属性 | 値 | 説明 |
|---|---|---|
| adjoin | {True, False} | 複数画像を単一のマルチイメージファイルへ結合する |
| alpha | {On, Off, Opaque, Transparent, Copy, Extract, Set} | アルファ/matte チャンネルの制御と特殊操作 |
| antialias | {True, False} | 画素のエイリアシングを除去する |
| area-limit | integer | 画素面積のリソース制限を設定する。 |
| attenuate | double | 画像にノイズを加える際に弱める(または強める)。 |
| authenticate | string | このパスワードで画像を復号する。 |
| background | color name | 画像の背景色 |
| blue-primary | x-value , y-value | 色度の青原色点(例: 0.15, 0.06) |
| bordercolor | color name | 画像の境界色を設定する |
| clip-mask | image | 画像にクリップマスクを関連付ける。 |
| colormap[i] | color name | 位置 i の色名(例: red)または 16 進値(例: #ccc) |
| comment | string | 画像のコメントを設定する |
| compression | {None, BZip, Fax, Group4, JPEG, JPEG2000, LosslessJPEG, LZW, RLE, Zip} | 画像圧縮のタイプ |
| debug | {All, Annotate, Blob, Cache, Coder, Configure, Deprecate, Draw, Exception, Locale, None, Resource, Transform, X11} | 大量のデバッグ情報を表示する |
| delay | integer | シーケンス内の次の画像を表示するまでにこの 1/100 秒が経過する必要がある |
| density | geometry | 画像の垂直・水平解像度(ピクセル) |
| depth | integer | 画像の深度 |
| direction | {Undefined, right-to-left, left-to-right | テキストを右から左または左から右へレンダリングする |
| disk-limit | integer | ディスクのリソース制限を設定する |
| dispose | {Undefined, None, Background, Previous} | レイヤーの破棄メソッド |
| dither | {True, False} | 画像に誤差拡散を適用する |
| display | string | 接続する X サーバーを指定する |
| extract | geometry | 画像から領域を抽出する |
| file | filehandle | 画像のファイルハンドルを設定する |
| filename | string | 画像のファイル名を設定する |
| fill | color | fill 色は描画図形の輪郭内部の任意の領域を塗る。 |
| font | string | 画像にテキストで注釈を付ける際にこのフォントを使う |
| fuzz | integer | この距離内の色は等しいとみなされる |
| gamma | double | 画像のガンマレベル |
| Gravity | {Forget, NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} | 画像 gravity のタイプ |
| green-primary | x-value , y-value | 色度の緑原色点(例: 0.3, 0.6) |
| index[x , y] | string | 位置 (x , y) のカラーマップインデックス |
| interlace | {None, Line, Plane, Partition, JPEG, GIF, PNG} | インターレース方式のタイプ |
| iterations | integer | GIF アニメーションに Netscape ループ拡張を追加する |
| label | string | 画像のラベルを設定する |
| loop | integer | GIF アニメーションに Netscape ループ拡張を追加する |
| magick | string | 画像形式を設定する |
| map-limit | integer | map のリソース制限を設定する |
| mask | image | 画像にマスクを関連付ける。 |
| matte | {True, False} | 画像の matte チャンネルを有効にする |
| mattecolor | color name | 画像の matte 色を設定する |
| memory-limit | integer | メモリのリソース制限を設定する |
| monochrome | {True, False} | 画像を白黒へ変換する |
| option | string | 画像形式にオプションを関連付ける(例: option=>'ps:imagemask') |
| orientation | {TopLeft, TopRight, BottomRight, BottomLeft, LeftTop, RightTop, RightBottom, LeftBottom} | 画像の向き |
| page | { Letter, Tabloid, Ledger, Legal, Statement, Executive, A3, A4, A5, B4, B5, Folio, Quarto, 10x14} or geometry | 画像キャンバスの希望のサイズと位置 |
| pixel[x , y] | string | 位置 (x , y) の 16 進値(例: #ccc) |
| pointsize | integer | Postscript または TrueType フォントのポイントサイズ |
| precision | integer | 出力する有効数字の最大桁数を設定する |
| quality | integer | JPEG/MIFF/PNG の圧縮レベル |
| red-primary | x-value , y-value | 色度の赤原色点(例: 0.64, 0.33) |
| sampling-factor | geometry | 水平・垂直のサンプリング係数 |
| scene | integer | 画像のシーン番号 |
| server | string | 接続する X サーバーを指定する |
| size | string | raw 画像の幅と高さ |
| stroke | color | stroke 色は図形の輪郭に沿って塗る。 |
| texture | string | 画像背景にタイル状に敷くテクスチャの名前 |
| tile-offset | geometry | 画像タイルのオフセット |
| time-limit | integer | 時間のリソース制限を秒単位で設定する |
| title | string | 画像のタイトルを設定する |
| type | {Bilevel, Grayscale, GrayscaleMatte, Palette, PaletteMatte, TrueColor, TrueColorMatte, ColorSeparation, ColorSeparationMatte} | 画像のタイプ |
| units | { Undefined, PixelsPerInch, PixelsPerCentimeter} | 画像解像度の単位 |
| verbose | {True, False} | 画像の詳細情報を出力する |
| virtual-pixel | {Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White} | 仮想画素のメソッド |
| white-point | x-value , y-value | 色度の白点(例: 0.3127, 0.329) |
なお、geometry パラメータは width と height パラメータの短縮形です(例: geometry=>'106x80' は width=>106, height=>80 と等価)。
SetAttribute() は Set() メソッドの別名です。
上記の属性のほとんどは magick に対応するものがあります。これらの属性のより詳細な説明はドキュメントを参照してください。
画像属性の取得
画像属性を取得するには Get() メソッドを使います。たとえば、
($a, $b, $c) = $image->Get('colorspace', 'magick', 'adjoin');
$width = $image->[3]->Get('columns');
「画像属性の設定」に挙げたすべての属性に加えて、以下の追加属性を取得できます。
| 画像属性 属性 | 値 | 説明 |
|---|---|---|
| area | integer | 現在消費している面積リソース |
| base-columns | integer | 基本画像の幅(変換前) |
| base-filename | string | 基本画像のファイル名(変換前) |
| base-rows | integer | 基本画像の高さ(変換前) |
| class | {Direct, Pseudo} | 画像クラス |
| colors | integer | 画像内の一意な色の数 |
| columns | integer | 画像の幅 |
| copyright | string | PerlMagick の著作権を取得する |
| directory | string | 画像モンタージュ内のタイル名 |
| elapsed-time | double | 画像作成からの経過時間(秒) |
| error | double | Compare() または Quantize() で計算した画素あたりの平均誤差 |
| bounding-box | string | 画像の境界ボックス |
| disk | integer | 現在消費しているディスクリソース |
| filesize | integer | ディスク上の画像のバイト数 |
| format | string | 説明的な画像形式を取得する |
| geometry | string | 画像のジオメトリ |
| height | integer | 画像の行数または高さ |
| icc | string | ICC プロファイル |
| icc | string | ICC プロファイル |
| id | integer | ImageMagick レジストリ ID |
| IPTC | string | IPTC プロファイル |
| mean-error | double | Compare() または Quantize() で計算した画素あたりの正規化平均誤差 |
| map | integer | 現在消費しているメモリマップリソース |
| matte | {True, False} | 画像の matte チャンネルを有効にする |
| maximum-error | double | Compare() または Quantize() で計算した画素あたりの正規化最大誤差 |
| memory | integer | 現在消費しているメモリリソース |
| mime | string | 画像形式の MIME |
| montage | geometry | 画像モンタージュ内のタイルサイズとオフセット |
| page.x | integer | 画像の仮想キャンバスの x オフセット |
| page.y | integer | 画像の仮想キャンバスの y オフセット |
| rows | integer | 画像の行数または高さ |
| signature | string | 画像の画素ストリームに関連付けられた SHA-256 メッセージダイジェスト |
| taint | {True, False} | 画像が変更されていれば True |
| total-ink-density | double | CMYK 画像の総インク密度を返す |
| transparent-color | color name | 画像の透明色を設定する |
| user-time | double | 画像作成からのユーザー時間(秒) |
| version | string | PerlMagick のバージョンを取得する |
| width | integer | 画像の列数または幅 |
| XMP | string | XMP プロファイル |
| x-resolution | integer | 画像の x 解像度 |
| y-resolution | integer | 画像の y 解像度 |
GetAttribute() は Get() メソッドの別名です。
上記の属性のほとんどは magick に対応するものがあります。これらの属性のより詳細な説明はドキュメントを参照してください。
画像と再構成の比較
Compare() メソッドで、画像とその再構成の差を数学的・視覚的に注釈します。このメソッドは以下のパラメータをサポートします。
| 比較パラメータ パラメータ | 値 | 説明 |
|---|---|---|
| channel | double | 画像チャンネルを選択する。デフォルトはアルファ以外の全チャンネル。 |
| fuzz | double | この距離内の色は等しいとみなされる |
| image | image-reference | 再構成画像 |
| metric | AE, MAE, MEPP, MSE, PAE, PSNR, RMSE | このメトリクスで画像間の差を測る |
この例では、ImageMagick ロゴをシャープにした再構成と比較します。
use Image::Magick;
$logo=Image::Magick->New();
$logo->Read('logo:');
$sharp=Image::Magick->New();
$sharp->Read('logo:');
$sharp->Sharpen('0x1');
$difference=$logo->Compare(image=>$sharp, metric=>'rmse');
print $difference->Get('error'), "\n";
$difference->Display();
報告される約 0.024 の二乗平均平方根誤差に加えて、差分画像が表示され、画像間の差を視覚的に確認できます。
画像モンタージュの作成
複数の別個の画像を組み合わせて合成画像を作成するには Montage() メソッドを使います。画像は合成画像上にタイル状に並べられ、任意で各タイルのすぐ下に画像名が表示されます。たとえば、
$image->Montage(geometry=>'160x160', tile=>'2x2', texture=>'granite:');
そして、設定できる Montage() パラメータの一覧を示します。
| モンタージュパラメータ パラメータ | 値 | 説明 |
|---|---|---|
| background | color name | 画像の背景色 |
| border | integer | 画像の境界幅 |
| filename | string | 画像のファイル名を設定する |
| fill | color name | fill 色は描画図形の輪郭内部の任意の領域を塗る。 |
| font | string | 画像にテキストで注釈を付ける際にこのフォントを使う |
| frame | geometry | 画像を装飾的な境界で囲む |
| geometry | geometry | 画像のジオメトリ |
| gravity | NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast | タイル内で画像が引き寄せられる方向 |
| label | string | 画像のラベルを設定する |
| mode | Frame, Unframe, Concatenate | サムネイルのフレーミングオプション |
| pointsize | integer | Postscript または TrueType フォントのポイントサイズ |
| shadow | {True, False} | 奥行きをシミュレートするためタイルの下に影を追加する |
| stroke | color name | stroke 色は図形の輪郭に沿って塗る。 |
| texture | string | 画像背景にタイル状に敷くテクスチャの名前 |
| tile | geometry | 行・ページあたりのタイル数(例: 6x4) |
| title | string | 画像のタイトルを設定する |
| transparent | string | 画像内でこの色を透明にする |
なお、geometry パラメータは width と height パラメータの短縮形です(例: geometry=>'106x80' は width=>106, height=>80 と等価)。
MontageImage() は Montage() メソッドの別名です。
上記の属性のほとんどは montage に対応するものがあります。これらの属性のより詳細な説明はドキュメントを参照してください。
Blob の扱い
blob は、ディスク上ではなくメモリ内で特定の画像形式を直接表すデータを含みます。PerlMagick は任意の画像 形式 で blob をサポートし、blob を特定の画像形式へ/から変換するメソッドを提供します。
| Blob メソッド メソッド | パラメータ | 戻り値 | 説明 |
|---|---|---|---|
| ImageToBlob | any image attribute | an array of image data in the respective image format | 画像または画像シーケンスを blob の配列へ変換する |
| BlobToImage | one or more blobs | the number of blobs converted to an image | 1 つ以上の blob を画像へ変換する |
ImageToBlob() はそれぞれの形式の画像データを返します。それを出力したり、ODBC データベースへ保存したり、ファイルへ書き出したり、表示プログラムへパイプしたりできます。
@blobs = $image->ImageToBlob();
open(DISPLAY,"| display -") || die;
binmode DISPLAY;
print DISPLAY $blobs[0];
close DISPLAY;
BlobToImage() メソッドは、与えられた blob から変換された画像または画像シーケンスを返します。
@blob=$db->GetImage();
$image=Image::Magick->new(magick=>'jpg');
$image->BlobToImage(@blob);
画像画素への直接アクセス
画像画素への直接アクセスを得るには以下のメソッドを使います。
| 画像画素への直接アクセス メソッド | パラメータ | 説明 |
|---|---|---|
| GetAuthenticPixels | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer | 本物の画素を C ポインタとして返す |
| GetVirtualPixels | geometry=>geometry , width=>integer , height=>integer , x=>integer , y=>integer | 仮想画素を const C ポインタとして返す |
| GetAuthenticIndexQueue | カラーマップインデックスまたは黒画素を C ポインタとして返す | |
| GetVirtualIndexQueue | カラーマップインデックスまたは黒画素を const C ポインタとして返す | |
| SyncAuthenticPixels | 本物の画素を画素キャッシュへ同期する |
その他のメソッド
Append() メソッドは画像のセットを連結します。たとえば、
$p = $image->Append(stack=>{true,false});
はオブジェクト $image に関連付けられたすべての画像を連結します。デフォルトでは画像は左から右へ積まれます。上から下へ積むには stack を True にします。
Clone() メソッドは画像のセットをコピーします。たとえば、
$q = $p->Clone();
はオブジェクト $p のすべての画像を $q へコピーします。単一・マルチイメージシーケンスのどちらにも使えます。
Coalesce() は、ページオフセットと dispose メソッドを尊重しながら画像のセットを合成します。GIF・MIFF・MNG アニメーションシーケンスは通常、画像背景で始まり、後続の各画像はサイズとオフセットが異なります。すべての画像が最初の画像の仮想キャンバスと同じサイズになり、シーケンス内の次の画像と合成された、新しい画像シーケンスが返されます。たとえば、
$q = $p->Coalesce();
ComplexImages() メソッドは画像シーケンスに複素数演算を行います。たとえば、
$p = $image->ComplexImages('conjugate');
EvaluateImages() メソッドは画像のセットに算術・論理・関係式を適用します。たとえば、
$p = $image->EvaluateImages('mean');
はオブジェクト $image に関連付けられたすべての画像を平均します。
Features() メソッドは、指定の距離について、画像内の各チャンネルの特徴量を 4 方向(水平・垂直・左右の対角)それぞれで返します。特徴量には、角度二次モーメント・コントラスト・相関・二乗和(分散)・逆差分モーメント・和平均・和分散・和エントロピー・エントロピー・差分散・差エントロピー・相関の情報尺度 1・相関の情報尺度 2・最大相関係数が含まれます。値は RGB・CMYK・RGBA・CMYKA の順(画像タイプに依存)です。
@features = $image->Features(1);
Flatten() メソッドは画像のセットを平坦化して返します。たとえば、
$p = $images->Flatten(background=>'none');
$p->Write('flatten.png');
画像シーケンスは、最初の画像の上に 2 番目以降の各画像を重ねて作成された単一の画像で置き換えられます。
Fx() メソッドは画像のセットに数式を適用して結果を返します。たとえば、
$p = $image->Fx(expression=>'(g+b)/2.0',channel=>'red');
$p->Write('fx.miff');
は赤チャンネルを緑と青チャンネルの平均で置き換えます。
このメソッドの詳細な議論は FX、特殊効果画像演算子 を参照してください。
Histogram() は画像内の一意な色とそれぞれの個数を返します。返される値は、赤・緑・青・不透明度・個数の値の配列です。
Morph() メソッドは画像のセットをモーフィングします。画像の画素とサイズの両方が線形補間され、ある画像から次の画像へのメタモルフォーゼの外観を与えます。
$p = $image->Morph(frames=>_integer_);
ここで frames は生成する中間画像の数です。デフォルトは 1 です。
Mosaic() は画像シーケンスからモザイクを作成します。
Mogrify() メソッドは画像操作メソッド(画像の操作)への単一のエントリポイントです。パラメータはメソッド名と、そのメソッドが必要とするパラメータです。たとえば、次の呼び出しは等価です。
$image->Crop('340x256+0+0');
$image->Mogrify('crop', '340x256+0+0');
MogrifyRegion() メソッドは画像の領域に変換を適用します。Mogrify() に似ていますが、領域ジオメトリで始まります。たとえば、位置 (40, 50) の 100x100 領域を明るくしたいとします。
$image->MogrifyRegion('100x100+40+50', 'modulate', brightness=>50);
PerceptualHash() は視覚的に同一の画像を同一または類似のハッシュへマッピングします。画像検索・認証・索引付け・コピー検出やデジタル透かしに役立ちます。各チャンネルと sRGB・HCLp カラースペースについて 7 つのハッシュ値が返されます。たとえば sRGB 画像では 42 個の知覚ハッシュが期待されます。
@phash = $image->PerceptualHash();
Ping() は、画像をメモリへ読み込まずに画像に関する情報を返す便利なメソッドです。画像の幅・高さ・バイト単位のファイルサイズ・ファイル形式を返します。複数のファイル名を指定できますが、ファイルハンドルは 1 つだけです。
($width, $height, $size, $format) = $image->Ping('logo.png');
($width, $height, $size, $format) = $image->Ping(file=>\*IMAGE);
($width, $height, $size, $format) = $image->Ping(blob=>$blob);
これは、画像が存在するか、その特性が何かを問い合わせる、より効率的でメモリ消費の少ない方法です。
Poly() は画像シーケンスと対応する項(係数と次数のペア)から多項式を構築します。
$p = $image->Poly([0.5,1.0,0.25,2.0,1.0,1.0]);
PreviewImage() は、画像処理操作をさまざまな強度で適用した指定画像のサムネイル 9 個をタイル状に並べます。特定の画像処理操作に適したパラメータを特定するのに役立ちます。次の操作から選びます: Rotate, Shear, Roll, Hue, Saturation, Brightness, Gamma, Spiff, Dull, Grayscale, Quantize, Despeckle, ReduceNoise, AddNoise, Sharpen, Blur, Threshold, EdgeDetect, Spread, Solarize, Shade, Raise, Segment, Swirl, Implode, Wave, OilPaint, CharcoalDrawing, JPEG。例を示します。
$preview = $image->Preview('Gamma');
$preview->Display();
テキスト配置を完全に制御するにはフォントメトリクス情報が必要です。次を使います。
($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) =
$image->QueryFontMetrics(_parameters_);
ここで parameters は Annotate メソッドの任意のパラメータです。返される値は次のとおりです。
- 文字幅
- 文字高さ
- アセンダー
- ディセンダー
- テキスト幅
- テキスト高さ
- 最大水平アドバンス
- 境界: x1
- 境界: y1
- 境界: x2
- 境界: y2
- 原点: x
- 原点: y
複数行テキストの最大テキスト幅・高さを得るには QueryMultilineFontMetrics() を使います。
既知の色名の一覧を返すには QueryColor() をパラメータなしで呼び、1 つ以上の色名を指定すると赤・緑・青・不透明度の値を取得します。
@colors = $image->QueryColor();
($red, $green, $blue) = $image->QueryColor('cyan');
($red, $green, $blue, $alpha) = $image->QueryColor('#716baeff');
QueryColorname() は色値を受け取り、それぞれの名前または 16 進値を返します。
$name = $image->QueryColorname('rgba(80,60,0,0)');
既知のフォントの一覧を返すには QueryFont() をパラメータなしで呼び、1 つ以上のフォント名を指定すると、フォント名・説明・ファミリ・スタイル・ストレッチ・ウェイト・エンコーディング・ファウンドリ・フォーマット・メトリクス・グリフの値を取得します。
@fonts = $image->QueryFont();
$weight = ($image->QueryFont('Helvetica'))[5];
既知の画像形式の一覧を返すには QueryFormat() をパラメータなしで呼び、1 つ以上の形式名を指定すると、adjoin・blob サポート・raw・デコーダー・エンコーダー・説明・モジュールの属性を取得します。
@formats = $image->QueryFormat();
($adjoin, $blob_support, $raw, $decoder, $encoder, $description, $module) =
$image->QueryFormat('gif');
画像形式名で MagickToMime() を呼ぶと、tif から image/tiff のような MIME タイプを取得します。
$mime = $image->MagickToMime('tif');
すでに実行中の display または animate アプリケーションへコマンドを送るには RemoteCommand() を使います。唯一のパラメータは表示またはアニメーションする画像ファイルの名前です。
$image->RemoteCommand('image.jpg');
Smush() メソッドは画像のセットを密着させて連結します。たとえば、
$p = $image->Smush(stack=>{true,false},offset=>integer);
はオブジェクト $image に関連付けられたすべての画像を密着連結します。デフォルトでは左から右へ密着させます。上から下へ密着させるには stack を True にします。
Statistics() は画像内の各チャンネルの画像統計を返します。返される値は、深度・最小値・最大値・平均・標準偏差・尖度・歪度・エントロピーの値の配列で、RGB・CMYK・RGBA・CMYKA の順(画像タイプに依存)です。
@statistics = $image->Statistics();
最後に、Transform() メソッドは、1 つ以上の画像の切り抜きまたはリサイズのための完全修飾ジオメトリ指定を受け取ります。たとえば、
$p = $image->Transform(crop=>'100x100+0+0');
上記の任意のメソッド名に Image を追加できます。たとえば PingImage() は Ping() メソッドの別名です。
例外処理
すべての PerlMagick メソッドは成功時に未定義の文字列コンテキストを返します。問題が起きると、エラーは数値ステータスコードを埋め込んだ文字列として返されます。400 未満のステータスコードは警告です。これは操作が完了しなかったがある程度回復可能だったことを意味します。400 以上の数値コードはエラーで、操作が完全に失敗したことを示します。各メソッドで例外がどう返されるかを示します。
数値を返すメソッド(Read()・Write() など):
$x = $image->Read(...);
warn "$x" if "$x"; # エラーメッセージを出力
$x =~ /(\d+)/;
print $1; # エラー番号を出力
print 0+$x; # 読み込んだ画像数を出力
画像に対して操作するメソッド(Resize()・Crop() など):
$x = $image->Crop(...);
warn "$x" if "$x"; # エラーメッセージを出力
$x =~ /(\d+)/;
print $1; # エラー番号を出力
画像を返すメソッド(EvaluateSequence()・Montage()・Clone())は次のようにエラーをチェックすべきです。
$x = $image->Montage(...);
warn "$x" if !ref($x); # エラーメッセージを出力
$x =~ /(\d+)/;
print $1; # エラー番号を出力
エラーメッセージの例を示します。
Error 400: Memory allocation failed
エラーと警告コード の完全な一覧を確認してください。
次は数値ステータスコードの使い方を示します。
$x = $image->Read('rose.png');
$x =~ /(\d+)/;
die "unable to continue" if ($1 == ResourceLimitError);
定数
PerlMagick には以下の定数が含まれます。
BlobError
BlobWarning
CacheError
CacheWarning
CoderError
CoderWarning
ConfigureError
ConfigureWarning
CorruptImageError
CorruptImageWarning
DelegateError
DelegateWarning
DrawError
DrawWarning
ErrorException
FatalErrorException
FileOpenError
FileOpenWarning
ImageError
ImageWarning
MissingDelegateError
MissingDelegateWarning
ModuleError
ModuleWarning
Opaque
OptionError
OptionWarning
QuantumDepth
QuantumRange
RegistryError
RegistryWarning
ResourceLimitError
ResourceLimitWarning
StreamError
StreamWarning
Success
Transparent
TypeError
TypeWarning
WarningException
XServerError
XServerWarning
次のようにアクセスできます。
Image::Magick->QuantumDepth