Color Modes

PerlMagick,Perl API

安裝概觀範例腳本讀取或寫入影像操作影像設定影像屬性取得影像屬性比較影像與其重建建立影像蒙太奇使用 Blob直接存取影像像素其他方法處理例外常數

PerlMagick 是一個物件導向的 Perl 介面,用於 ImageMagick。使用此模組可以從 Perl 腳本中讀取、操作或寫入影像或影像序列。這使得它非常適合 Web CGI 腳本。您的系統上必須安裝 ImageMagick 6.5.5 或更高版本以及 Perl 5.005_02 或更高版本,才能正確建置 PerlMagick。

有許多實用的腳本可以向您展示 PerlMagick 的價值。您可以使用 MagickStudio 進行基於 Web 的影像處理和轉換,或使用 L-systems 使用數學結構建立植物影像,最後使用 WebMagick 影像導航器 瀏覽縮圖集合並選擇要查看的影像。

您可以在 ImageMagick Studio 的 Web 瀏覽器中試用 PerlMagick。或者,您可以查看 範例 以了解 PerlMagick 的選定函數。

安裝

UNIX

您的系統 RPM 儲存庫中是否有 PerlMagick?例如,在我們的 CentOS 系統上,我們按以下方式安裝 PerlMagick

yum install ImageMagick-perl

如果沒有,則必須從 ImageMagick 原始碼發行版安裝 PerlMagick。下載最新的 原始碼 版本。

使用以下命令解壓縮發行版

tar xvzf ImageMagick.tar.gz

接下來配置和編譯 ImageMagick


    $
    cd ImageMagick-7.1.1
    $ ./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 物件的使用後,應該考慮將其銷毀。影像序列中的每個影像都儲存在虛擬記憶體中。這可能會佔用數百 MB 的記憶體。銷毀 PerlMagick 物件後,記憶體會釋放給其他 Perl 方法使用。建議使用 undef 來銷毀物件

undef $image;

要刪除所有影像但保留 Image::Magick 物件,請使用

@$image = ();

最後,要從多影像序列中刪除單張影像,請使用

undef $image->[$x];

下一節將說明如何使用各種 PerlMagick 方法來操作影像序列。

有些 PerlMagick 方法需要外部程式,例如 Ghostscript。這可能需要在 PATH 環境變數中明確指定路徑才能正常運作。例如(在 Linux 中),

$ENV{PATH}' . "='/../bin:/usr/bin:/usr/local/bin';

範例程式碼

以下是一個讓您入門的範例程式碼

#!/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";

這個程式碼會讀取三張影像、裁剪它們,並將單張影像寫入為 GIF 動畫序列。在許多情況下,您可能需要存取序列中的個別影像。以下範例說明如何執行此操作

#!/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');

假設您想從一張 100 x 100 像素的白色畫布開始,中央有一個紅色像素。請嘗試

$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";   # return the number of images associated with object p
push(@$q, @$p);  # push the images from object p onto object q
@$p = ();        # delete the images but not the object p
$p->Convolve([1, 2, 1, 2, 4, 2, 1, 2, 1]);   # 3x3 Gaussian kernel

讀取或寫入影像

使用下列方法來讀取、寫入或顯示單張影像或影像序列

讀取或寫入方法
方法 參數 傳回值 說明
讀取 一個或多個檔案名稱 讀取的影像數量 讀取單張影像或影像序列
寫入 檔案名稱 寫入的影像數量 寫入單張影像或影像序列
顯示 伺服器名稱 顯示的影像數量 將單張影像或影像序列顯示到 X 伺服器
動畫 伺服器名稱 動畫的影像數量 將影像序列製作成動畫並顯示到 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);

要將 PNG 格式的影像寫入 PERL 檔案控制代碼,請使用

$filename = "image.png";
open(IMAGE, ">$filename");
$image->Write(file=>\*IMAGE, filename=>$filename);
close(IMAGE);

請注意,由於 ImageMagick 和 ActiveState Perl 發行版之間的 C 執行階段程式庫版本不同,或者如果其中一個 DLL 使用 /MT 選項連結,因此在 Windows 下從 Perl 檔案控制代碼讀取或寫入可能會失敗。如需說明,請參閱 跨 DLL 邊界傳遞 CRT 物件的潛在錯誤

如果檔名中出現 %0Nd、%0No 或 %0Nx,則會將其解讀為 printf 格式規格,並以指定的場景編號的十進位、八進位或十六進位編碼替換該規格。例如:

image%03d.miff

會轉換檔案 image000.miff、image001.miff 等。

您可以選擇性地將「影像」新增至任何方法名稱。例如,ReadImage() 是方法 Read() 的別名。

處理影像

使用例如 ReadImage() 方法建立影像後,您可能會想要對其進行操作。以下列出 PerlMagick 中提供給您使用的所有影像處理方法。這裡有一些 PerlMagick 方法的範例。以下是一個呼叫影像處理方法的範例

$image->Crop(geometry=>'100x100+10+20');
$image->[$x]->Frame("100x200");

以下是您可以呼叫的其他影像處理方法列表

影像處理方法
方法 參數 說明
AdaptiveBlur(自適應模糊) geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用給定半徑和標準差 (sigma) 的高斯運算子自適應地模糊影像。減少邊緣附近的模糊效果。
AdaptiveResize(自適應調整大小) geometry=>幾何形狀, width=>整數, height=>整數, filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>雙精度浮點數, blur=>雙精度浮點數 使用資料相關三角剖分自適應地調整影像大小。指定 > 1 的 blur 以獲得模糊效果,或 < 1 以獲得清晰效果
AdaptiveSharpen(自適應銳化) geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用給定半徑和標準差 (sigma) 的高斯運算子自適應地銳化影像。增加邊緣附近的銳化效果。
AdaptiveThreshold(自適應閾值) geometry=>幾何形狀, width=>整數, height=>整數, bias=>雙精度浮點數 局部自適應閾值。
AddNoise(新增雜訊) noise=>{Uniform, Gaussian, Multiplicative, Impulse, Laplacian, Poisson}, attenuate=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 將雜訊新增至影像
AffineTransform(仿射變換) affine=>浮點數值陣列, translate=>浮點數,浮點數, scale=> 浮點數,浮點數, rotate=>浮點數, skewX=>浮點數, skewY=>浮點數, interpolate={Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor}, background=>顏色名稱 對影像進行仿射變換
Affinity(關聯性) image=>影像控制代碼, method=>{None, FloydSteinberg, Riemersma} 從此影像中選擇一組特定的顏色
Annotate(註釋) text=>字串, font=>字串, family=>字串, style=>{Normal, Italic, Oblique, Any}, stretch=>{Normal, UltraCondensed, ExtraCondensed, Condensed, SemiCondensed, SemiExpanded, Expanded, ExtraExpanded, UltraExpanded}, weight=>整數, pointsize=>整數, density=>幾何形狀, stroke=>顏色名稱, strokewidth=>整數, fill=>顏色名稱, undercolor=>顏色名稱, kerning=>浮點數, geometry=>幾何形狀, gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, antialias=>{true, false}, x=>整數, y=>整數, affine=>浮點數值陣列, translate=>浮點數,浮點數, scale=>浮點數,浮點數, rotate=>浮點數. skewX=>浮點數, skewY=> 浮點數, align=>{Left, Center, Right}, encoding=>{UTF-8}, interline-spacing=>雙精度浮點數, interword-spacing=>雙精度浮點數, 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=>幾何形狀, width=>整數, height=>整數, intensity-sigma=>雙精度浮點數, spatial-sigma=>雙精度浮點數, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 一種非線性、邊緣保留和降噪的影像平滑濾波器。它會使用附近像素的強度值的加權平均值來取代每個像素的強度。此權重基於高斯分佈。權重不僅取決於像素的歐幾里得距離,還取決於輻射度差異(例如,範圍差異,如顏色強度、深度距離等)。這可以保留清晰的邊緣。強度和空間標準差的預設值分別為 2*直徑0.5*直徑
黑色門檻值(BlackThreshold) threshold=>顏色, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 將所有低於門檻值強度的像素強制轉換為黑色
藍移(BlueShift) factor=>雙精度浮點數, 模擬月光下夜間的場景。從 1.5 的因子開始。
模糊(Blur) geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用給定半徑和標準差 (sigma) 的高斯運算器降低影像雜訊並降低細節層級。
邊框(Border) geometry=>幾何形狀, width=>整數, height=>整數, bordercolor=>顏色名稱, compose=>{未定義, 加, 上方, 混合, 凹凸貼圖, 清除, 顏色加深, 顏色減淡, 上色, 複製黑色, 複製藍色, 複製CMYK, 青色, 複製綠色, 複製, 複製洋紅色, 複製Alpha, 複製紅色, RGB, 複製黃色, 變暗, 目標, 差值, 位移, 溶解, 目標上方, 目標內, 目標外, 目標覆蓋, 目標, 排除, 強光, 色相, 內, 變亮, 亮度, 減, 模組化, 乘, 無, 外, 覆蓋, 覆蓋, 加, 替換合成操作, 飽和度, 螢幕, 柔光, 來源, 來源上方, 來源內, 來源外, 來源覆蓋, 來源, 減去, 門檻值, 異或 }, 用彩色邊框圍繞影像
邊緣偵測(CannyEdge) geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, 'lower-percent'=>雙精度浮點數, 'upper-percent'=>雙精度浮點數 使用多階段演算法偵測影像中的各種邊緣(例如 CannyEdge('0x1+10%+40%'))。
炭筆(Charcoal) geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數 模擬炭筆繪畫
裁切(Chop) geometry=>幾何形狀, width=>整數, height=>整數, x=>整數, y=>整數, gravity=>{西北, 北, 東北, 西, 中心, 東, 西南, 南, 東南} 裁切影像
CLAHE(對比受限的自適應直方圖均衡化) geometry=>幾何形狀, width=>整數, height=>整數, number-bins=>整數, clip-limit=>雙精度浮點數 對比受限的自適應直方圖均衡化。 寬度高度 將影像分割成區塊。 number-bins 是每個區塊的直方圖區間數(最小值 2,最大值 256)。 clip-limit 是局部對比變化量的限制。 2 到 3 的 clip-limit 是一個良好的起點。
夾住(Clamp) channel=>{紅色, RGB, 全部, 等等} 將值低於零的每個像素設定為零,並將值高於量子範圍的任何像素設定為量子範圍(例如 65535),否則像素值保持不變。
剪裁(Clip) id=>名稱, inside=>{true, false}, 沿著 8BIM 設定檔中的命名路徑套用。
剪裁遮罩(ClipMask) mask=>影像控點 根據影像遮罩定義剪裁影像
顏色查找表(Clut) image=>影像控點, interpolate={平均, 雙三次, 雙線性, 濾鏡, 整數, 網格, 最近鄰插值}, channel=>{紅色, RGB, 全部, 等等} 將顏色查找表套用至影像序列
顏色(Color) color=>顏色名稱 將整個影像設定為此顏色。
顏色決策列表(ColorDecisionList) filename=>字串, 使用顏色決策列表進行顏色校正。
上色(Colorize) fill=>顏色名稱, blend=>字串 使用填充顏色為影像上色
顏色矩陣(ColorMatrix) matrix=>浮點數值陣列 對影像套用顏色校正。雖然您可以使用可變大小的矩陣,但通常您會對 RGBA 影像使用 5 x 5 矩陣,對 CMYKA 影像使用 6x6 矩陣。需要 6x6 矩陣才能進行偏移(使用正規化值填充最後一欄)。
色彩空間(Colorspace) 色彩空間=>{RGB、灰階、透明、OHTA、XYZ、YCbCr、YCC、YIQ、YPbPr、YUV、CMYK} 設定影像色彩空間
註解 字串 為影像新增註解
色彩門檻 開始色彩=>色彩,結束色彩=>色彩,通道=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 將所有低於門檻值強度的像素強制轉換為黑色
比較圖層 方法=>{任意、清除、覆蓋} 比較序列中每個影像與下一個影像,並返回發現的任何像素差異的最小邊界區域。影像不一定要大小相同,但最好所有影像都合併(影像大小相同,在扁平化的畫布上,以便精確表示特定畫格的外觀)。
合成 影像=>影像控制代碼,合成=>{未定義、加、置頂、混合、凹凸貼圖、清除、加深顏色、減淡顏色、著色、複製黑色、複製藍色、複製 CMYK、青色、複製綠色、複製、複製洋紅色、複製 Alpha、複製紅色、RGB、複製黃色、變暗、目標、差異、位移、溶解、目標置頂、目標內、目標外、目標覆蓋、目標、排除、強光、色相、內、變亮、亮度、減、模組化、乘、無、外、覆蓋、上方、加、替換合成操作、飽和度、螢幕、柔光、來源、來源置頂、來源內、來源外、來源覆蓋、來源、減去、門檻、異或},遮罩=>影像控制代碼,幾何=>幾何,x=>整數,y=>整數,重力=>{西北、北、東北、西、中心、東、西南、南、東南},不透明度=>整數,平鋪=>{是、否},旋轉=>雙精度,色彩=>色彩名稱,混合=>幾何,插值=>{未定義、平均、雙立方、雙線性、濾鏡、整數、網格、最近鄰、樣條},裁剪到自身=>{是、否} 將一個影像合成到另一個影像上。將旋轉參數與平鋪參數一起使用。
連通元件 連通性=>整數 唯一標記的連通元件,從 4 或 8 向連通性中選擇。
對比 銳化=>{是、否} 增強或降低影像對比度
對比拉伸 色階=>字串,'黑點'=>雙精度,'白點'=>雙精度,通道=>{紅色、RGB、全部等} 通過「拉伸」強度值的範圍來改善影像中的對比度
卷積 係數=>浮點值陣列,通道=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色},偏移=>雙精度 將卷積核應用於影像。給定核階數,您將提供階數*階數個浮點值(例如,3x3 表示 9 個值)。
複製像素 影像=>影像控制代碼,幾何=>幾何,寬度=>整數,高度=>整數,x=>整數,y=>整數,偏移=>幾何,重力=>{西北、北、東北、西、中心、東、西南、南、東南},dx=>整數,dy=>整數 將像素從寬度x高度+x+y定義的影像複製到偏移+dx、+dy處的影像。
裁剪 幾何=>幾何,寬度=>整數,高度=>整數,x=>整數,y=>整數,模糊=>雙精度,重力=>{西北、北、東北、西、中心、東、西南、南、東南} 裁剪影像
循環色彩映射表 數量=>整數 將影像色彩映射表位移指定的數量
解密 密碼=>字串 將密碼像素轉換為普通像素
解構
將影像序列分解為組成部分
去斜 幾何=>字串,門檻=>雙精度 拉直影像
去斑 減少影像中的斑點
差異 影像=>影像控制代碼 計算兩個影像之間的差異指標
扭曲 points=>浮點數值陣列, method=>{仿射變換, 仿射投影, 縮放旋轉平移, SRT, 透視, 透視投影, 雙線性正向變換, 雙線性反向變換, 多項式, 圓弧, 極座標, 去極座標, 桶狀變形, 反向桶狀變形, Shepards 變形, 調整大小}, 'virtual-pixel'=>{背景 黑色 常數 抖動 邊緣 灰色 鏡像 隨機 平鋪 透明 白色}, 'best-fit'=>{True, False} 扭曲影像
繪製 primitive=>{點, 線, 矩形, 圓弧, 橢圓, 圓形, 路徑, 多線段, 多邊形, 貝茲曲線, 顏色, 遮罩, 文字, @檔案名稱}, points=>字串 , method=>{點, 替換, 填滿, 填滿到邊界, 重置}, stroke=>顏色名稱, fill=>顏色名稱, font=>字串, pointsize=>整數, strokewidth=>浮點數, antialias=>{true, false}, bordercolor=>顏色名稱, x=>浮點數, y=>浮點數, dash-offset=>浮點數, dash-pattern=>浮點數值陣列, affine=>浮點數值陣列, translate=>浮點數, 浮點數, scale=>浮點數, 浮點數, rotate=>浮點數, skewX=>浮點數, skewY=>浮點數, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline}, kerning=>浮點數, text=>字串, vector-graphics=>字串, interline-spacing=>雙精度浮點數, interword-spacing=>雙精度浮點數, direction=>{從右到左, 從左到右}, word-break=>{正常, 自動換行} 使用一個或多個圖形基元標註影像。
加密 密碼=>字串 將純文字像素轉換為加密像素
邊緣 radius=>雙精度浮點數 使用給定半徑的卷積濾波器增強影像中的邊緣。
浮雕 geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數 使用給定半徑和標準差 (sigma) 的卷積濾波器對影像進行浮雕處理。
增強
應用數位濾波器來增強雜訊影像
均衡化 channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}
對影像執行直方圖均衡化
範圍 geometry=>幾何形狀, width=>整數, height=>整數, x=>整數, y=>整數, fuzz=>雙精度浮點數, background=>顏色名稱, gravity=>{西北, 北, 東北, 西, 中央, 東, 西南, 南, 東南} 設定影像大小
評估 value=>雙精度浮點數, operator=>{加, 與, 除, 左移, 最大值, 最小值, 乘, 或, 右移, RMS, 減, 互斥或}, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 對影像應用算術、關係或邏輯運算式
濾波器 kernel=>字串, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色}, bias=>雙精度浮點數 將卷積核心應用於影像。
翻轉
在垂直方向上反映影像掃描線
水平翻轉
在水平方向上反映影像掃描線
填滿繪製 geometry=>幾何形狀, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色}, x=>整數, y=>整數 , fill=>顏色名稱, bordercolor=>顏色名稱, fuzz=>雙精度浮點數, invert=>{True, False} 變更任何與目標像素顏色匹配且為相鄰像素的像素的顏色值。 如果您指定邊界顏色,則會變更任何不是該顏色的相鄰像素的顏色值。
正向傅立葉變換 magnitude=>{True, False} 執行正向離散傅立葉變換 (DFT)
邊框 geometry=>幾何形狀, width=>整數, height=>整數, inner=>整數, outer=>整數, fill=>顏色名稱, compose=>{未定義, 加, 置於頂部, 混合, 凹凸貼圖, 清除, 顏色加深, 顏色減淡, 著色, 複製黑色, 複製藍色, 複製 CMYK, 青色, 複製綠色, 複製, 複製洋紅色, 複製 Alpha, 複製紅色, RGB, 複製黃色, 加深, 目標, 差值, 溶解, 目標置於頂部, 目標在內, 目標在外, 目標在上方, 目標, 排除, 強光, 色相, 在內, 變亮, 亮度, 減去, 調整, 乘, 無, 在外, 覆蓋, 在上方, 加, 替換合成操作, 飽和度, 螢幕, 柔光, 來源, 來源置於頂部, 來源在內, 來源在外, 來源在上方, 來源, 減去, 閾值, 互斥或 }, 以裝飾邊框環繞圖像
函數 parameters=>浮點數值陣列, function=>{Sin}, 'virtual-pixel'=>{背景黑色常數抖動邊緣灰色鏡像隨機平鋪透明白色} 將函數應用於圖像
伽瑪 gamma=>字串, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 對圖像進行伽瑪校正
高斯模糊 geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用給定半徑和標準差 (sigma) 的高斯運算器降低影像雜訊並降低細節層級。
取得像素 geometry=>幾何, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色}, normalize=>{true, false}, x=>整數, y=>整數 取得單一像素。預設會返回正規化的像素值。
取得像素 geometry=>幾何, width=>整數, height=>整數, x=>整數, y=>整數, map=>字串, normalize=>{true, false} 取得由映射定義的圖像像素(例如「RGB」、「RGBA」等)。預設會返回非正規化的像素值。
灰階 channel=>{平均值、亮度、亮度、Rec601 亮度、Rec601 亮度、Rec709 亮度、Rec709 亮度、RMS} 將圖像轉換為灰階
HaldClut image=>圖像控點, channel=>{紅色、RGB、全部等} 將 Hald 色彩查找表應用於圖像序列
霍夫線變換 geometry=>幾何, width=>雙精度浮點數, height=>雙精度浮點數, threshold=>雙精度浮點數 識別圖像中的線條(例如 HoughLine('9x9+195'))。
識別 file=>檔案, features=>距離, moments=>{True, False}, unique=>{True, False} 識別圖像的屬性
向內爆破 amount=>雙精度浮點數, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} 將圖像像素圍繞中心向內爆破
積分   計算圖像中值的總和(像素值)。
逆離散傅立葉變換 magnitude=>{True, False} 執行逆離散傅立葉變換 (DFT)
K 均值 geometry=>幾何, 'colors'=>雙精度浮點數, 'iterations'=>雙精度浮點數, 'tolerance'=>雙精度浮點數 K 均值色彩簡化。
Kuwahara geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 邊緣保留降噪濾波器
標籤 字串 為圖像指定標籤
圖層 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=>{未定義、加、置頂、混合、凹凸貼圖、清除、加深顏色、減淡顏色、著色、複製黑色、複製藍色、複製 CMYK、青色、複製綠色、複製、複製洋紅色、複製 Alpha、複製紅色、RGB、複製黃色、變暗、目標、差異、位移、溶解、目標置頂、目標內、目標外、目標上方、目標、排除、強光、色相、內、變亮、線性光、亮度、減、模組化、乘、無、外、覆蓋、上方、加、替換合成操作、飽和度、螢幕、柔光、來源、來源置頂、來源內、來源外、來源上方、來源、減去、閾值、互斥或}, dither=>{true, false} 將每個圖像與序列中前一張圖像的 GIF 處置形式進行比較。由此,嘗試選擇最小的裁剪圖像來替換每一幀,同時保留動畫的效果。
色階 levels=>字串, 'black-point'=>雙精度浮點數, 'gamma'=>雙精度浮點數, 'white-point'=>雙精度浮點數, channel=>{紅色、RGB、全部等} 調整圖像對比度的級別
色階顏色 invert=>>{True, False}, 'black-point'=>字串, 'white-point'=>字串, channel=>{紅色、RGB、全部等} 使用給定的顏色調整圖像色階
線性拉伸 levels=>字串, 'black-point'=>雙精度浮點數, 'white-point'=>雙精度浮點數 具有飽和度拉伸的線性
液態調整大小 geometry=>幾何, width=>整數, height=>整數, delta-x=>雙精度浮點數, rigidity=>雙精度浮點數 使用縫隙雕刻重新調整圖像大小。
放大
使用像素藝術縮放將圖像大小加倍
遮罩 mask=>影像控點 根據遮罩定義合成圖像像素
消光填充 geometry=>幾何, x=>整數, y=>整數 , matte=>整數, bordercolor=>顏色名稱, fuzz=>雙精度浮點數, invert=>{True, False} 更改與目標像素顏色匹配且相鄰的任何像素的消光值。如果指定邊框顏色,則會更改任何不是該顏色的相鄰像素的消光值。
均值漂移 geometry=>幾何, width=>雙精度浮點數, height=>雙精度浮點數, distance=>雙精度浮點數 描繪圖像中任意形狀的群集(例如 MeanShift('7x7+10%'))。
中值濾波器 geometry=>geometry, width=>整數, height=>整數, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 將每個像素替換為鄰域中值強度像素。
縮小
將圖像尺寸縮小一半
模式 geometry=>geometry, width=>整數, height=>整數, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 使每個像素成為鄰域的主要顏色
調整 factor=>geometry, brightness=>雙精度浮點數, saturation=>雙精度浮點數, hue=>雙精度浮點數, lightness=>雙精度浮點數, whiteness=>雙精度浮點數, blackness=>雙精度浮點數 按指定百分比改變圖像的亮度、飽和度和色調
形態學 kernel=>字串, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色}, iterations=>整數 對圖像應用形態學方法。
動態模糊 geometry=>geometry, radius=>雙精度浮點數, sigma=>雙精度浮點數, angle=>雙精度浮點數, bias=>雙精度浮點數, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 使用給定半徑和標準差 (sigma) 的高斯運算符在給定角度下減少圖像雜訊並降低細節級別,以模擬運動效果
反轉 gray=>{True、False}, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 將每個像素替換為其互補色(白色變為黑色,黃色變為藍色,等等)
標準化 channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}
轉換圖像以涵蓋整個顏色值範圍
油畫 radius=>整數 模擬油畫
不透明 color=>顏色名稱, fill=>顏色名稱, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色}, invert=>{True、False} 將圖像中的此顏色更改為填充顏色
有序抖動 threshold=>{threshold、checks、o2x2、o3x3、o4x4、o8x8、h4x4a、h6x6a、h8x8a、h4x4o、h6x6o、h8x8o、h16x16o、hlines6x4}, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 對圖像進行有序抖動
可察覺 epsilon=>雙精度浮點數, channel=>{紅色、RGB、全部等} 將值小於 |epsilon| 的每個像素設定為 -epsilonepsilon(取較接近者),否則像素值保持不變。
拍立得 caption=>字串, angle=>雙精度浮點數, pointsize=>雙精度浮點數, font=>字串, stroke=> 顏色名稱, strokewidth=>整數, fill=>顏色名稱, gravity=>{西北、北、東北、西、中心、東、西南、南、東南}, background=>顏色名稱 模擬拍立得照片。
色板化 levels=>整數, dither=>{True、False} 將圖像減少到有限的顏色級別
配置文件 name=>字串, profile=>二進制數據, rendering-intent=>{未定義、飽和度、感知、絕對、相對}, black-point-compensation=>{True、False} 添加或移除 ICC 或 IPTC 圖像配置文件;名稱是正式名稱(例如 ICC 或文件名;將配置文件設定為 '' 以移除配置文件
量化 colors=>整數, colorspace=>{RGB、灰色、透明、OHTA、XYZ、YCbCr、YIQ、YPbPr、YUV、CMYK、sRGB、HSL、HSB}, treedepth=> 整數, dither=>{True、False}, dither-method=>{Riemersma、Floyd-Steinberg}, measure_error=>{True、False}, global_colormap=>{True、False}, transparent-color=>顏色 圖像中的首選顏色數量
浮雕 geometry=>geometry, width=>整數, height=>整數, x=>整數, y=>整數, raise=>{True、False} 使圖像邊緣變亮或變暗以建立 3D 效果
範圍閾值 geometry=>幾何形狀, 'low-black'=>雙精度浮點數, 'low-white'=>雙精度浮點數, 'high-white'=>雙精度浮點數, 'high-black'=>雙精度浮點數 結合軟硬影像臨界值。
降低雜訊 geometry=>geometry, width=>整數, height=>整數, channel=>{全部、預設、Alpha、黑色、藍色、CMYK、青色、灰色、綠色、索引、洋紅色、Alpha、紅色、RGB、黃色} 使用雜訊峰值消除濾波器降低影像中的雜訊
重新映射 image=>影像控點, dither=>{true, false}, dither-method=>{Riemersma, Floyd-Steinberg} 使用參考影像中最接近的顏色替換影像中的顏色。
重新取樣 density=>幾何形狀, x=>雙精度浮點數, y=>雙精度浮點數, filter=>{點, 方形, 三角形, Hermite, Hanning, Hamming, Blackman, 高斯, 二次, 三次, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>雙精度浮點數 將影像重新取樣至所需的解析度。指定 > 1 的 模糊 表示模糊,< 1 表示銳利
調整大小 geometry=>幾何形狀, width=>整數, height=>整數, filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>雙精度浮點數, blur=>雙精度浮點數 將影像縮放至所需的大小。指定 > 1 的 模糊 表示模糊,< 1 表示銳利
滾動 geometry=>幾何形狀, x=>整數, y=>整數 垂直或水平滾動影像
旋轉 degrees=>雙精度浮點數, background=>顏色名稱 旋轉影像
旋轉模糊 geometry=>幾何形狀, angle=>雙精度浮點數, bias=>雙精度浮點數, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 對影像進行徑向模糊。
取樣 geometry=>幾何形狀, width=>整數, height=>整數 使用像素取樣縮放影像。
縮放 geometry=>幾何形狀, width=>整數, height=>整數 將影像縮放至所需的大小
分割 colorspace=>{RGB, 灰色, 透明, OHTA, XYZ, YCbCr, YCC, YIQ, YPbPr, YUV, CMYK}, verbose={True, False}, cluster-threshold=>雙精度浮點數, smoothing-threshold=雙精度浮點數 透過分析顏色分量的直方圖並識別均勻的單元來分割影像
選擇性模糊 geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, threshold=>雙精度浮點數, bias=>雙精度浮點數, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 選擇性地模糊對比度臨界值內的像素。
分離 channel=>{紅色, RGB, 全部, 等等} 將影像中的通道分離為灰階影像
陰影 geometry=>幾何形狀, azimuth=>雙精度浮點數, elevation=>雙精度浮點數, gray=>{true, false} 使用遠處光源對影像進行陰影處理
設定像素 geometry=>幾何形狀, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色}, color=>浮點數值陣列, x=>整數, y=>整數, color=>浮點數值陣列 設定單一像素的值。預期為標準化像素值。
設定像素 geometry=>幾何形狀, channel=>{全部, 預設, Alpha, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色}, color=>浮點數值陣列, width=>整數, height=>整數, x=>整數, y=>整數, color=>浮點數值陣列 設定一個或多個像素的值。預期為標準化像素值。
陰影 geometry=>幾何形狀, opacity=>雙精度浮點數, sigma=>雙精度浮點數, x=>整數, y=>整數 模擬影像陰影
銳化 geometry=>幾何形狀, radius=>雙精度浮點數, sigma=>雙精度浮點數, bias=>雙精度浮點數, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用給定半徑和標準差 (sigma) 的高斯運算子銳化影像。
修剪 geometry=>幾何形狀, width=>整數, height=>整數 從影像邊緣修剪像素
剪切 geometry=>幾何形狀, x=>雙精度浮點數, y=>雙精度浮點數 fill=>顏色名稱 沿 X 或 Y 軸以正或負剪切角剪切影像
S 形對比度 geometry=>字串, 'contrast'=>雙精度浮點數, 'mid-point'=>雙精度浮點數 channel=>{紅色, RGB, 全部, 等等}, sharpen=>{True, False} S 形非線性對比度控制。使用 S 形轉換函數增加影像的對比度,而不會使高光或陰影飽和。對比度 表示要增加多少對比度(0 表示無;3 表示典型值;20 表示很多);中點 表示中間色調在結果影像中的位置(0 表示白色;50% 表示中間灰色;100% 表示黑色)。若要降低對比度,請將銳化設定為 False。
簽章
為影像像素串流產生 SHA-256 訊息摘要
素描 geometry=>geometry, radius=>double, sigma=>double, angle=>double 使用指定半徑、標準差 (sigma) 和角度的高斯運算子來描繪影像
曝光過度 geometry=>string, threshold=>double, channel=>{全部, 預設, 透明度, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 將所有高於臨界值層級的像素反轉
排序像素
依據強度遞增順序排序每個掃描線內的像素。
稀疏顏色 points=>浮點數值陣列, method=>{重心座標法, 雙線性插值, 夏普德法, 佛洛諾伊圖}, 'virtual-pixel'=>{背景 黑色 常數 抖動 邊緣 灰色 鏡像 隨機 平鋪 透明 白色} 在提供的點周圍插值影像顏色
拼接 geometry=>幾何形狀, width=>整數, height=>整數, x=>整數, y=>整數, fuzz=>雙精度浮點數, background=>顏色名稱, gravity=>{西北, 北, 東北, 西, 中央, 東, 西南, 南, 東南} 拼接影像
擴散 radius=>double, interpolate=>{未定義, 平均, 雙三次, 雙線性, 網格, 最近鄰插值, 樣條} 將影像像素隨機位移
統計 geometry=>geometry, width=>整數, height=>整數, channel=>{全部, 預設, 透明度, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色}, type=>{對比度, 中位數, 眾數, 平均值, 最大值, 最小值, 減少雜訊, RMS} 將每個像素替換為鄰域中對應的統計資料。
隱寫術 image=>影像控點, offset=>整數 在影像中隱藏數位浮水印
立體 image=>影像控點, x=>整數, y=>整數 合成兩個影像,並產生單一影像,該影像為立體圖對的左影像和右影像的合成影像
去除
去除影像的所有設定檔和註解。
旋轉 degrees=>double, interpolate=>{未定義, 平均, 雙三次, 雙線性, 網格, 最近鄰插值, 樣條} 圍繞中心旋轉影像像素
紋理 texture=>影像控點 要平鋪到影像背景的紋理名稱
縮圖 geometry=>幾何形狀, width=>整數, height=>整數 將影像的大小變更為指定的尺寸,並移除任何相關的設定檔。
臨界值 threshold=>string, channel=>{全部, 預設, 透明度, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 對影像進行臨界值處理
色彩 fill=>顏色名稱, blend=>字串 使用填滿色彩為影像著色。
透明 color=>色彩名稱, invert=>{True, False} 使此色彩在影像中透明
轉置
在垂直方向翻轉影像並旋轉 90 度
橫向
在水平方向翻轉影像並旋轉 270 度
修剪
移除影像中背景色彩的邊緣
非銳利遮罩 geometry=>geometry, radius=>double, sigma=>double, gain=>double, threshold=>double 使用非銳利遮罩演算法銳化影像。
暈影 geometry=>geometry, radius=>double, sigma=>double, x=>整數, y=>整數, background=>色彩名稱 以暈影樣式偏移影像邊緣
波浪 geometry=>geometry, amplitude=>double, wavelength=>double, interpolate=>{未定義, 平均, 雙三次, 雙線性, 網格, 最近鄰插值, 樣條} 沿正弦波改變影像
小波去雜訊 geometry=>geometry, threshold=>double, threshold=>double 使用小波轉換移除影像中的雜訊
白平衡 根據 LAB 色彩空間中的灰階世界假設,對影像套用白平衡。
白色臨界值 threshold=>string, , channel=>{全部, 預設, 透明度, 黑色, 藍色, CMYK, 青色, 灰色, 綠色, 索引, 洋紅色, Alpha, 紅色, RGB, 黃色} 強制將所有強度高於臨界值的像素變為白色

請注意,geometry 參數是 widthheight 參數的簡寫(例如,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   file size
%c   comment
%d   directory
%e   filename extension
%f   filename
%g   page geometry
%h   height
%i   input filename
%k   number of unique colors
%l   label
%m   magick
%n   number of scenes
%o   output filename
%p   page number
%q   quantum depth
%r   image class and colorspace
%s   scene number
%t   top of filename
%u   unique temporary filename
%w   width
%x   x resolution
%y   y resolution
%z   image depth
%C   image compression type
%D   image dispose method
%H   page height
%Q   image compression quality
%T   image delay
%W   page width
%X   page x offset
%Y   page y offset
%@   bounding box
%#   signature
%%   a percent sign
\n   newline
\r   carriage return

例如,

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。

當您在布林屬性上呼叫 Get() 時,Image::Magick 會傳回 1 或 0,而不是字串。

以下是您可以設定的所有影像屬性清單

影像屬性
屬性 說明
adjoin {True, False} 將影像合併成單一多影像檔案
alpha {On, Off, Opaque, Transparent, Copy, Extract, Set} alpha/matte 通道的控制和特殊操作
antialias {True, False} 移除像素鋸齒
area-limit 整數 設定像素區域資源限制。
attenuate 雙精度浮點數 在將雜訊新增至影像時減少(或增強)。
authenticate 字串 使用此密碼解密影像。
background 顏色名稱 影像背景顏色
blue-primary *x* 值,*y* 值 色度藍色原色點(例如 0.15,0.06)
bordercolor 顏色名稱 設定影像邊框顏色
clip-mask 影像 將剪裁遮罩與影像關聯。
colormap[*i*] 顏色名稱 位置 *i* 的顏色名稱(例如紅色)或十六進制值(例如 #ccc)
comment 字串 設定影像註解
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 整數 在顯示序列中的下一張影像之前,必須經過這麼多百分之一秒
density 幾何 影像的垂直和水平解析度(以像素為單位)
depth 整數 影像深度
direction {Undefined, right-to-left, left-to-right 從右到左或從左到右呈現文字
disk-limit 整數 設定磁碟資源限制
dispose {Undefined, None, Background, Previous} 圖層處置方法
dither {True, False} 將誤差擴散應用於影像
display 字串 指定要連線的 X 伺服器
extract 幾何 從影像中提取區域
file 檔案控制代碼 設定影像檔案控制代碼
檔案名稱 字串 設定影像檔名
fill 顏色 填充顏色會繪製繪製形狀輪廓內的任何區域。
font 字串 使用此字型在影像上添加文字註解
fuzz 整數 此距離內的顏色被視為相等
gamma 雙精度浮點數 影像的伽瑪級別
Gravity {Forget, NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} 影像重心類型
green-primary *x* 值,*y* 值 色度綠色原色點(例如 0.3,0.6)
index[*x*, *y*] 字串 位置 (*x*, *y*) 的顏色表索引
interlace {None, Line, Plane, Partition, JPEG, GIF, PNG} 交錯顯示類型
迭代次數 整數 將 Netscape 循環擴展添加到 GIF 動畫
標籤 字串 設定圖片標籤
循環 整數 將 Netscape 循環擴展添加到 GIF 動畫
magick 字串 設定圖片格式
映射限制 整數 設定映射資源限制
遮罩 影像 將遮罩與圖片關聯。
消光 {True, False} 啟用圖片消光通道
消光顏色 顏色名稱 設定圖片消光顏色
記憶體限制 整數 設定記憶體資源限制
單色 {True, False} 將圖片轉換為黑白
選項 字串 將選項與圖片格式關聯(例如 option=>'ps:imagemask'
方向 {左上,右上,右下,左下,左上,右上,右下,左下} 圖片方向
頁面 { Letter, Tabloid, Ledger, Legal, Statement, Executive, A3, A4, A5, B4, B5, Folio, Quarto, 10x14} 或 幾何形狀 圖片畫布的首選大小和位置
像素[x, y] 字串 位置 (x, y) 的十六進制值(例如 #ccc)
點大小 整數 Postscript 或 TrueType 字體的點大小
精度 整數 設定要打印的有效位數上限
品質 整數 JPEG/MIFF/PNG 壓縮級別
紅色原色 *x* 值,*y* 值 色度紅色原點(例如 0.64, 0.33)
採樣因子 幾何 水平和垂直採樣因子
場景 整數 圖片場景編號
伺服器 字串 指定要連線的 X 伺服器
大小 字串 原始圖片的寬度和高度
筆畫 顏色 筆畫顏色沿著形狀的輪廓繪製。
紋理 字串 要平鋪到影像背景的紋理名稱
拼貼偏移 幾何 圖片拼貼偏移
時間限制 整數 設定時間資源限制(以秒為單位)
標題 字串 設定圖片標題
類型 {雙階調,灰階,灰階消光,調色板,調色板消光,真彩色,真彩色消光,分色,分色消光} 圖片類型
單位 { 未定義,每英寸像素,每公分像素} 圖片解析度的單位
詳細 {True, False} 打印有關圖片的詳細資訊
虛擬像素 {背景 黑色 常數 抖動 邊緣 灰色 鏡像 隨機 拼貼 透明 白色} 虛擬像素方法
白點 *x* 值,*y* 值 色度白點(例如 0.3127, 0.329)

請注意,geometry 參數是 widthheight 參數的簡寫(例如 geometry=>'106x80' 等同於 width=>106, height=>80)。

SetAttribute() 是方法 Set() 的別名。

上面列出的大多數屬性在 magick 中都有類似的屬性。有關這些屬性的詳細說明,請參閱文件。

取得圖片屬性

使用 Get() 方法來取得圖片屬性。例如,

($a, $b, $c) = $image->Get('colorspace', 'magick', 'adjoin');
$width = $image->[3]->Get('columns');

除了 設定圖片屬性 中列出的所有屬性之外,您還可以取得以下其他屬性

影像屬性
屬性 說明
區域 整數 當前消耗的區域資源
基礎列數 整數 基礎圖片寬度(轉換前)
基礎檔案名稱 字串 基礎圖片檔案名稱(轉換前)
基礎列數 整數 基礎圖片高度(轉換前)
類別 {直接,虛擬} 圖片類別
顏色 整數 圖片中唯一顏色的數量
列數 整數 圖片寬度
版權 字串 取得 PerlMagick 的版權
目錄 字串 圖片蒙太奇中的拼貼名稱
經過時間 雙精度浮點數 自建立圖片以來的經過時間(以秒為單位)
錯誤 雙精度浮點數 使用 Compare() 或 Quantize() 方法計算的每個像素的平均誤差
邊界框 字串 圖片邊界框
磁碟 整數 當前消耗的磁碟資源
檔案大小 整數 圖片在磁碟上的位元組數
格式 字串 取得描述性圖片格式
幾何 字串 圖片幾何形狀
高度 整數 圖片的列數或高度
icc 字串 ICC 配置檔
icc 字串 ICM 配置檔
id 整數 ImageMagick 註冊表 id
IPTC 字串 IPTC 配置檔
平均誤差 雙精度浮點數 使用 Compare() 或 Quantize() 方法計算的每個像素的標準化平均誤差
映射 整數 當前消耗的記憶體映射資源
消光 {True, False} 影像是否具有透明通道
最大誤差 雙精度浮點數 使用 Compare() 或 Quantize() 方法計算的每個像素標準化最大誤差
記憶體 整數 當前消耗的記憶體資源
MIME 類型 字串 影像格式的 MIME 類型
蒙太奇 幾何 影像蒙太奇中的圖塊大小和偏移量
page.x 整數 影像虛擬畫布的 x 偏移量
page.y 整數 影像虛擬畫布的 y 偏移量
列數 整數 圖片的列數或高度
簽章 字串 與影像像素流關聯的 SHA-256 訊息摘要
污點 {True, False} 如果影像已被修改,則為 True
總墨量 雙精度浮點數 傳回 CMYK 影像的總墨量
透明色彩 顏色名稱 設定影像透明色彩
使用者時間 雙精度浮點數 自建立影像以來的使用者時間(以秒為單位)
版本 字串 取得 PerlMagick 的版本
寬度 整數 影像的列數或寬度
XMP 字串 XMP 設定檔
x 解析度 整數 影像的 x 解析度
y 解析度 整數 影像的 y 解析度

GetAttribute() 是方法 Get() 的別名。

上面列出的大多數屬性在 magick 中都有類似的屬性。有關這些屬性的詳細說明,請參閱文件。

比較影像及其重建結果

使用 Compare() 方法以數學和視覺方式標註影像及其重建結果之間的差異。該方法支援以下參數

比較參數
參數 說明
通道 雙精度浮點數 選擇影像通道,預設為除 Alpha 通道以外的所有通道。
fuzz 雙精度浮點數 此距離內的顏色被視為相等
影像 影像參考 影像重建結果
指標 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 顏色名稱 背景色彩名稱
邊框 整數 影像邊框寬度
檔案名稱 字串 蒙太奇影像的名稱
fill 顏色名稱 註解的填滿色彩
font 字串 X11 字型名稱
框架 幾何 以裝飾邊框環繞圖像
幾何 幾何 複合影像中每個圖塊的首選圖塊和邊框大小(例如 120x120+4+3>)
重力方向 NorthWest、North、NorthEast、West、Center、East、SouthWest、South、SouthEast 影像在圖塊內朝向的方向
標籤 字串 為圖像指定標籤
模式 Frame、Unframe、Concatenate 縮圖框架選項
點大小 整數 Postscript 或 TrueType 字體的點大小
陰影 {True, False} 在圖塊下方新增陰影以模擬深度
筆畫 顏色名稱 註解的筆畫色彩
紋理 字串 要平鋪到影像背景的紋理名稱
圖塊 幾何 每列和每頁的圖塊數量(例如 6x4)
標題 字串 為影像蒙太奇指定標題
透明 字串 使此色彩在影像中透明

請注意,geometry 參數是 widthheight 參數的簡寫(例如 geometry=>'106x80' 等同於 width=>106, height=>80)。

MontageImage() 是方法 Montage() 的別名。

上面列出的大多數屬性在 montage 中都有對應的屬性。如需這些屬性的詳細說明,請參閱文件。

使用 Blob

Blob 包含直接表示記憶體中特定影像格式的資料,而不是磁碟上的資料。PerlMagick 支援以下任何影像 格式 的 Blob,並提供在特定影像格式之間轉換 Blob 的方法。

Blob 方法
方法 參數 傳回值 說明
ImageToBlob 任何影像 屬性 以相應影像格式表示的影像資料陣列 將影像或影像序列轉換為 Blob 陣列
BlobToImage 一個或多個 Blob 轉換為影像的 Blob 數量 將一個或多個 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=>幾何, width=>整數, height=>整數, x=>整數, y=>整數 以 C 指標返回真實像素
GetVirtualPixels geometry=>幾何, width=>整數, height=>整數, x=>整數, y=>整數 以常數 C 指標返回虛擬像素
GetAuthenticIndexQueue 以 C 指標返回色圖索引或黑色像素
GetVirtualIndexQueue 以常數 C 指標返回色圖索引或黑色像素
SyncAuthenticPixels 將真實像素同步到像素快取

其他方法

Append() 方法會附加一組影像。例如,

$p = $image->Append(stack=>{true,false});

會附加與物件 $image 相關聯的所有影像。根據預設,影像會從左到右堆疊。將 stack 設定為 True 以從上到下堆疊。

Clone() 方法會複製一組影像。例如,

$q = $p->Clone();

會將物件 $p 中的所有影像複製到 $q。您可以將此方法用於單一或多影像序列。

Coalesce() 會合成一組影像,同時遵守任何頁面偏移和處置方法。GIF、MIFF 和 MNG 動畫序列通常以影像背景開始,並且每個後續影像的大小和偏移量都不同。會返回一個新的影像序列,其中所有影像的大小都與第一個影像的虛擬畫布相同,並與序列中的下一個影像合成。例如,

$q = $p->Coalesce();

ComplexImages() 方法會對影像序列執行複雜的數學運算。例如,

$p = $image->ComplexImages('conjugate');

EvaluateImages() 方法會將算術、邏輯或關係運算式套用於一組影像。例如,

$p = $image->EvaluateImages('mean');

會平均與物件 $image 相關聯的所有影像。

Features() 方法會針對指定距離的四個方向(水平、垂直、左對角線和右對角線)中的每一個方向,返回影像中每個通道的特徵。這些特徵包括角二階矩、對比度、相關性、平方和:變異數、逆差矩、總和平均值、總和變異數、總和熵、熵、差異變異數、差異熵、相關性資訊度量 1、相關性資訊度量 2 和最大相關係數。值以 RGB、CMYK、RGBA 或 CMYKA 順序排列(取決於影像類型)。

@features = $image->Features(1);

Flatten() 方法會拼合一組影像並返回。例如,

$p = $images->Flatten(background=>'none');
$p->Write('flatten.png');

影像序列會被透過將第一個影像之後的每個影像合成到第一個影像上而建立的單一影像所取代。

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() 是一種便捷方法,可以在無需將影像讀入記憶體的情況下傳回有關影像的資訊。 它會傳回影像的寬度、高度、以位元組為單位的檔案大小和檔案格式。 您可以指定多個檔案名稱,但只能指定一個檔案控制代碼

($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 個縮略圖與以不同強度套用的影像處理作業一起排列。 這可能有助於精確定位特定影像處理作業的適當參數。 從這些作業中選擇:旋轉、剪切、滾動、色調、飽和度、亮度、伽瑪、Spiff、暗淡、灰度、量化、去斑、減少雜訊、添加雜訊、銳化、模糊、閾值、邊緣偵測、擴散、太陽化、陰影、提升、分割、漩渦、內爆、波浪、油畫、炭筆畫、JPEG。 以下是一個範例

$preview = $image->Preview('Gamma');
$preview->Display();

要完全控制文字定位,您需要字體度量資訊。 使用

($x_ppem, $y_ppem, $ascender, $descender, $width, $height, $max_advance) =
  $image->QueryFontMetrics(parameters);

其中參數Annotate 方法的任何參數。 傳回值為

  1. 字元寬度
  2. 字元高度
  3. 上升高度
  4. 下降高度
  5. 文字寬度
  6. 文字高度
  7. 最大水平進度
  8. 邊界:x1
  9. 邊界:y1
  10. 邊界:x2
  11. 邊界:y2
  12. 原點:x
  13. 原點:y

使用 QueryMultilineFontMetrics() 取得多行文字的最大文字寬度和高度。

呼叫不帶參數的 QueryColor() 以傳回已知顏色名稱的清單,或指定一個或多個顏色名稱以取得這些屬性:紅色、綠色、藍色和不透明度值。

@colors = $image->QueryColor();
($red, $green, $blue) = $image->QueryColor('cyan');
($red, $green, $blue, $alpha) = $image->QueryColor('#716baeff');

QueryColorname() 接受顏色值並傳回其各自的名稱或十六進制值;

$name = $image->QueryColorname('rgba(80,60,0,0)');

呼叫不帶參數的 QueryFont() 以傳回已知字體的清單,或指定一個或多個字體名稱以取得這些屬性:字體名稱、描述、字族、樣式、拉伸、粗細、編碼、鑄造廠、格式、度量和字形值。

@fonts = $image->QueryFont();
$weight = ($image->QueryFont('Helvetica'))[5];

呼叫不帶參數的 QueryFormat() 以傳回已知影像格式的清單,或指定一個或多個格式名稱以取得這些屬性:相鄰、Blob 支援、原始、解碼器、編碼器、描述和模組。

@formats = $image->QueryFormat();
($adjoin, $blob_support, $raw, $decoder, $encoder, $description, $module) =
  $image->QueryFormat('gif');

使用影像格式名稱呼叫 MagickToMime() 以取得其 MIME 類型,例如從 tif 取得 image/tiff

$mime = $image->MagickToMime('tif');

使用 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() 方法接受用於裁剪或調整一個或多個影像大小的完整幾何規格。 例如,

$p = $image->Transform(crop=>'100x100+0+0');

您可以選擇性地將Image添加到上面的任何方法名稱中。 例如,PingImage() 是方法 Ping() 的別名。

處理例外狀況

所有 PerlMagick 方法在成功時都會傳回未定義的字串。如果發生任何問題,錯誤將以包含內嵌數字狀態碼的字串形式傳回。狀態碼小於 400 表示警告。這表示操作未完成,但在某種程度上可以恢復。數值代碼大於或等於 400 表示錯誤,表示操作完全失敗。以下是不同方法如何傳回例外狀況

傳回數字的方法(例如 Read()、Write())

$x = $image->Read(...);
warn "$x" if "$x";      # print the error message
$x =~ /(\d+)/;
print $1;               # print the error number
print 0+$x;             # print the number of images read

對影像進行操作的方法(例如 Resize()、Crop())

$x = $image->Crop(...);
warn "$x" if "$x";      # print the error message
$x =~ /(\d+)/;
print $1;               # print the error number

應該以這種方式檢查傳回影像的方法(EvaluateSequence()、Montage()、Clone())是否有錯誤

$x = $image->Montage(...);
warn "$x" if !ref($x);  # print the error message
$x =~ /(\d+)/;
print $1;               # print the error number

以下是一個錯誤訊息範例

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