⚠️ これは 非公式の翻訳サイトです。ImageMagick Studio LLC とは無関係です。正確な情報は 原文(https://imagemagick.org/perl-magick/) を参照してください。

インストール • 概要 • サンプルスクリプト • 画像の読み書き • 画像の操作 • 画像属性の設定 • 画像属性の取得 • 画像と再構成の比較 • 画像モンタージュの作成 • 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
#!/usr/local/bin/perl
use Image::Magick;

my($image, $x);

$image = Image::Magick->new;
$x = $image->Read('girl.png', 'logo.png', 'rose.png');
warn "$x" if "$x";

$x = $image->Crop(geometry=>'100x100+100+100');
warn "$x" if "$x";

$x = $image->Write('x.png');
warn "$x" if "$x";

このスクリプトは 3 つの画像を読み込み、切り抜き、単一の画像を GIF アニメーションシーケンスとして書き出します。多くの場合、シーケンスの個々の画像へアクセスしたいでしょう。次の例はその方法を示します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/local/bin/perl
use Image::Magick;

my($image, $p, $q);

$image = new Image::Magick;
$image->Read('x1.png');
$image->Read('j*.jpg');
$image->Read('k.miff[1, 5, 3]');
$image->Contrast();
for ($x = 0; $image->[$x]; $x++)
{
  $image->[$x]->Frame('100x200') if $image->[$x]->Get('magick') eq 'GIF';
  undef $image->[$x] if $image->[$x]->Get('columns') < 100;
}
$p = $image->[1];
$p->Draw(stroke=>'red', primitive=>'rectangle', points=>20,20 100,100');
$q = $p->Montage();
undef $image;
$q->Write('x.miff');

中央に赤い画素を持つ 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 メソッドの任意のパラメータです。返される値は次のとおりです。

  1. 文字幅
  2. 文字高さ
  3. アセンダー
  4. ディセンダー
  5. テキスト幅
  6. テキスト高さ
  7. 最大水平アドバンス
  8. 境界: x1
  9. 境界: y1
  10. 境界: x2
  11. 境界: y2
  12. 原点: x
  13. 原点: 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