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-system 使用数学结构创建植物图像,最后浏览缩略图图像集合并选择要查看的图像,可以使用 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 了解 quantum。您可以在实例化图像对象时请求特定的量子深度

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';

示例脚本

以下是一个示例脚本,可以帮助您入门

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

假设您想要从一个 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');

让我们使用 Taipai 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);

请注意,从 Perl 文件句柄中读取或写入可能在 Windows 下失败,因为 ImageMagick 和 ActiveState Perl 发行版之间的 C 运行时库版本不同,或者其中一个 DLL 与 /MT 选项链接。有关解释,请参见 跨 DLL 边界传递 CRT 对象时可能发生的错误

如果文件名中出现 %0Nd、%0No 或 %0Nx,则将其解释为 printf 格式规范,并将规范替换为场景编号的指定十进制、八进制或十六进制编码。例如,

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=>颜色名称 仿射变换图像
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=>颜色名称, strokewidth=>integer, fill=>颜色名称, undercolor=>颜色名称, 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
调整图像,使其方向适合观看(即左上角方向)。
自动阈值 method=>{Kapur, OTSU, Triangle} 自动执行图像阈值处理。
双边平滑 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} 一种非线性、边缘保持和降噪的图像平滑滤波器。它用附近像素的加权平均值替换每个像素的强度。该权重基于高斯分布。权重不仅取决于像素的欧几里德距离,还取决于辐射差异(例如,颜色强度、深度距离等的范围差异)。这样可以保留清晰的边缘。强度和空间西格玛的默认值分别为2*diameter0.5*diameter
黑色阈值 threshold=>color, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 将所有低于阈值强度的像素强制为黑色。
蓝色偏移 factor=>double, 模拟月光下的夜晚场景。从 1.5 的因子开始。
模糊 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)的高斯算子降低图像噪声并降低细节水平。
边框 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 }, 用颜色边框包围图像。
Canny 边缘 geometry=>geometry, radius=>double, sigma=>double, 'lower-percent'=>double, 'upper-percent'=>double 使用多阶段算法来检测图像中的各种边缘(例如,CannyEdge('0x1+10%+40%'))。
炭笔画 geometry=>geometry, radius=>double, sigma=>double 模拟炭笔画。
切片 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 对比度受限自适应直方图均衡化。widthheight将图像划分为瓦片。number-bins是每个瓦片的直方图箱数(最小 2,最大 256)。clip-limit是对局部对比度变化的对比度限制。2 到 3 的剪切限制是一个好的起点。
钳位 channel=>{Red, RGB, All, etc.} 将所有值低于零的像素设置为零,并将所有值高于量子范围的像素设置为量子范围(例如 65535),否则像素值保持不变。
剪裁 id=>name, inside=>{true, false}, 沿 8BIM 配置文件中命名的路径应用。
剪裁蒙版 mask=>image-handle 根据图像蒙版剪裁图像。
颜色查找表 image=>image-handle, interpolate={Average, Bicubic, Bilinear, Filter, Integer, Mesh, NearestNeighbor}, channel=>{Red, RGB, All, etc.} 将颜色查找表应用于图像序列。
颜色 color=>color name 将整个图像设置为此颜色。
颜色决策列表 filename=>string, 使用颜色决策列表进行颜色校正。
着色 fill=>color name, blend=>string 用填充色给图像着色。
颜色矩阵 matrix=>array of float values 将颜色校正应用于图像。虽然可以使用不同大小的矩阵,但通常对于 RGBA 图像使用 5 x 5,对于 CMYKA 图像使用 6x6。对于偏移量,需要 6x6 矩阵(用归一化值填充最后一列)。
色彩空间 colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YCC, YIQ, YPbPr, YUV, CMYK} 设置图像色彩空间。
注释 string 在图像中添加注释。
颜色阈值 start-color=>color, stop-color=>color, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 将所有低于阈值强度的像素强制为黑色。
比较图层 method=>{any, clear, overlay} 比较序列中的每张图像与下一张,并返回发现的任何像素差异的最小边界区域。图像不必大小相同,但最好将所有图像合并(图像大小相同,在一个扁平的画布上,以准确地表示特定帧的外观)。
合成 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 参数一起使用。
连通域 connectivity=>integer, 连通域唯一标记,选择 4 路或 8 路连通。
对比度 sharpen=>{True, False} 增强或减弱图像对比度。
对比度拉伸 levels=>string, 'black-point'=>double, 'white-point'=>double, channel=>{Red, RGB, All, etc.} 通过“拉伸”强度值的范围来提高图像对比度。
卷积 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个浮点值(例如,3x3 意味着 9 个值)。
复制像素 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处的图像。
裁剪 geometry=>geometry, width=>integer, height=>integer, x=>integer, y=>integer, fuzz=>double, gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} 裁剪图像。
循环色表 amount=>integer 将图像色表偏移 amount。
解密 passphrase=>string 将密文像素转换为明文像素。
分解
将图像序列分解为组成部分。
倾斜校正 geometry=>string,threshold=>double 将图像拉直。
去斑点 减少图像中的斑点。
差异 image=>image-handle 计算两张图像之间的差异度量。
扭曲 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} 扭曲图像。
绘制 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} 使用一个或多个图形基元注释图像。
加密 passphrase=>string 将明文像素转换为密文像素。
边缘 radius=>double 使用给定半径的卷积滤波器增强图像中的边缘。
浮雕 geometry=>geometry, radius=>double, sigma=>double 使用给定半径和标准差(sigma)的卷积滤波器给图像浮雕效果。
增强
应用数字滤波器以增强噪声图像。
均衡化 channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}
对图像执行直方图均衡化。
范围 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} 设置图像大小。
计算 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} 将算术、关系或逻辑表达式应用于图像。
滤镜 kernel=>string, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, bias=>double 将卷积核应用于图像。
翻转
沿垂直方向反射图像扫描线。
翻转
沿水平方向反射图像扫描线。
洪水填充 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} 更改与目标像素颜色匹配且为相邻像素的任何像素的颜色值。如果指定边界颜色,则更改任何不是该颜色的相邻像素的颜色值。
正向傅里叶变换 magnitude=>{True, False} 实现正向离散傅里叶变换 (DFT)。
框架 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 }, 用装饰性边框包围图像。
函数 parameters=>array of float values, function=>{Sin}, 'virtual-pixel'=>{Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White} 将函数应用于图像。
伽马 gamma=>string, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 对图像进行伽马校正。
高斯模糊 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)的高斯算子降低图像噪声并降低细节水平。
获取像素 geometry=>几何, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, normalize=>{true, false}, x=>整数, y=>整数 获取单个像素。默认情况下,将返回归一化的像素值。
GetPixels geometry=>几何, width=>整数, height=>整数, x=>整数, y=>整数, map=>字符串, normalize=>{true, false} 获取由地图定义的图像像素(例如,“RGB”、“RGBA”等)。默认情况下,将返回未归一化的像素值。
Grayscale channel=>{Average, Brightness, Lightness, Rec601Luma, Rec601Luminance, Rec709Luma, Rec709Luminance, RMS} 将图像转换为灰度图像
HaldClut image=>图像句柄, channel=>{Red, RGB, All, etc.} 将 Hald 颜色查找表应用于图像序列
HoughLine geometry=>几何, width=>双精度浮点数, height=>双精度浮点数, threshold=>双精度浮点数 识别图像中的线条(例如,HoughLine('9x9+195'))。
Identify file=>文件, features=>距离, moments=>{True, False}, unique=>{True, False} 识别图像的属性
Implode amount=>双精度浮点数, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} 将图像像素内爆到中心
Integral   计算图像中值(像素值)的总和。
InverseDiscreteFourierTransform magnitude=>{True, False} 实现逆离散傅里叶变换 (DFT)
Kmeans geometry=>几何, 'colors'=>双精度浮点数, 'iterations'=>双精度浮点数, 'tolerance'=>双精度浮点数 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 处置形式。由此,尝试选择最小的裁剪图像来替换每个帧,同时保留动画的结果。
Level levels=>字符串, 'black-point'=>双精度浮点数, 'gamma'=>双精度浮点数, 'white-point'=>双精度浮点数, channel=>{Red, RGB, All, etc.} 调整图像对比度级别
LevelColors invert=>>{True, False}, 'black-point'=>字符串, 'white-point'=>字符串, channel=>{Red, RGB, All, etc.} 使用给定颜色对图像进行平级化
LinearStretch levels=>字符串, 'black-point'=>双精度浮点数, 'white-point'=>双精度浮点数 线性饱和度拉伸
LiquidResize geometry=>几何, width=>整数, height=>整数, delta-x=>双精度浮点数, rigidity=>双精度浮点数 使用缝合雕刻重新缩放图像。
Magnify
使用像素艺术缩放将图像大小加倍
Mask mask=>image-handle 根据蒙版合成图像像素
MatteFloodfill geometry=>几何, x=>整数, y=>整数 , matte=>整数, bordercolor=>颜色名称, fuzz=>双精度浮点数, invert=>{True, False} 更改与目标像素颜色匹配且是相邻像素的任何像素的哑元值。如果指定了边框颜色,则会更改任何不是该颜色的相邻像素的哑元值。
MeanShift geometry=>几何, width=>双精度浮点数, height=>双精度浮点数, distance=>双精度浮点数 勾勒图像中任意形状的聚类(例如,MeanShift('7x7+10%'))。
MedianFilter geometry=>几何, width=>整数, height=>整数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 用邻域的中值强度像素替换每个像素。
Minify
将图像大小减半
Mode geometry=>几何, width=>整数, height=>整数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使每个像素成为邻域的主要颜色
Modulate factor=>几何, brightness=>双精度浮点数, saturation=>双精度浮点数, hue=>双精度浮点数, lightness=>双精度浮点数, whiteness=>双精度浮点数, blackness=>双精度浮点数 将图像的亮度、饱和度和色调改变指定百分比
Morphology kernel=>字符串, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, iterations=>整数 将形态学方法应用于图像。
MotionBlur geometry=>几何, radius=>双精度浮点数, sigma=>双精度浮点数, angle=>双精度浮点数, bias=>双精度浮点数, 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 channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}
将图像转换为跨越完整颜色值范围
OilPaint radius=>整数 模拟油画
Opaque color=>颜色名称, fill=>颜色名称, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, invert=>{True, False} 将此颜色更改为图像中的填充颜色
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=>双精度浮点数, channel=>{Red, RGB, All, etc.} 将每个像素的值小于 |epsilon| 的像素设置为 -epsilonepsilon(以哪个更接近为准),否则像素值保持不变。
Polaroid caption=>字符串, angle=>双精度浮点数, pointsize=>双精度浮点数, font=>字符串, stroke=> 颜色名称, strokewidth=>整数, fill=>颜色名称, gravity=>{NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast}, background=>颜色名称 模拟宝丽来照片。
Posterize levels=>整数, dither=>{True, False} 将图像减少到有限数量的颜色级别
Profile name=>字符串, profile=>blob, rendering-intent=>{Undefined, Saturation, Perceptual, Absolute, Relative}, black-point-compensation=>{True, False} 添加或删除 ICC 或 IPTC 图像配置文件;名称是正式名称(例如 ICC 或文件名;将配置文件设置为 '' 以删除配置文件
Quantize colors=>整数, colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YCC, 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=>颜色 图像中首选的颜色数量
Raise geometry=>几何, width=>整数, height=>整数, x=>整数, y=>整数, raise=>{True, False} 使图像边缘变亮或变暗以创建 3D 效果
RangeThreshold geometry=>几何, 'low-black'=>双精度浮点数, 'low-white'=>双精度浮点数, 'high-white'=>双精度浮点数, 'high-black'=>双精度浮点数 结合软硬图像阈值。
ReduceNoise geometry=>几何, width=>整数, height=>整数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 使用噪声峰值消除滤波器减少图像中的噪声
Remap image=>图像句柄, dither=>{true, false}, dither-method=>{Riemersma, Floyd-Steinberg} 用参考图像中最接近的颜色替换图像的颜色。
Resample density=>几何, x=>双精度浮点数, y=>双精度浮点数, filter=>{Point, Box, Triangle, Hermite, Hanning, Hamming, Blackman, Gaussian, Quadratic, Cubic, Catrom, Mitchell, Lanczos, Bessel, Sinc}, support=>双精度浮点数 将图像重新采样到所需的解析度。指定 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=>几何, x=>整数, y=>整数 垂直或水平滚动图像
Rotate degrees=>双精度浮点数, background=>颜色名称 旋转图像
RotationalBlur geometry=>几何, angle=>双精度浮点数, bias=>双精度浮点数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 径向模糊图像。
Sample geometry=>几何, width=>整数, height=>整数 使用像素采样缩放图像。
Scale geometry=>几何, width=>整数, height=>整数 将图像缩放到所需大小
Segment colorspace=>{RGB, Gray, Transparent, OHTA, XYZ, YCbCr, YCC, YIQ, YPbPr, YUV, CMYK}, verbose={True, False}, cluster-threshold=>双精度浮点数, smoothing-threshold=双精度浮点数 通过分析颜色分量的直方图并识别均匀的单元来分割图像
SelectiveBlur geometry=>几何, radius=>双精度浮点数, sigma=>双精度浮点数, threshold=>双精度浮点数, bias=>双精度浮点数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 选择性地模糊对比度阈值内的像素。
Separate channel=>{Red, RGB, All, etc.} 将图像中的通道分离为灰度图像
Shade geometry=>几何, azimuth=>双精度浮点数, elevation=>双精度浮点数, gray=>{true, false} 使用远光源对图像进行阴影处理
SetPixel geometry=>几何, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, color=>浮点数数组, x=>整数, y=>整数, color=>浮点数数组 设置单个像素的值。预期使用归一化的像素值。
SetPixels geometry=>几何, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow}, color=>浮点数数组, width=>整数, height=>整数, x=>整数, y=>整数, color=>浮点数数组 设置一个或多个像素的值。预期使用归一化的像素值。
Shadow geometry=>几何, opacity=>双精度浮点数, sigma=>双精度浮点数, x=>整数, y=>整数 模拟图像阴影
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=>几何, width=>整数, height=>整数 从图像边缘修剪像素
Shear geometry=>几何, x=>双精度浮点数, y=>双精度浮点数 fill=>颜色名称 沿 X 或 Y 轴通过正或负剪切角剪切图像
SigmoidalContrast geometry=>字符串, 'contrast'=>双精度浮点数, 'mid-point'=>双精度浮点数 channel=>{Red, RGB, All, etc.}, sharpen=>{True, False} S 形非线性对比度控制。使用 S 形传递函数增加图像对比度,而不会使高光或阴影饱和。Contrast 表示对比度增加的幅度(0 表示无;3 表示典型;20 表示很多);mid-point 表示中间色调在最终图像中的位置(0 表示白色;50% 表示中灰色;100% 表示黑色)。若要降低对比度,请将 sharpen 设置为 False。
Signature
为图像像素流生成 SHA-256 消息摘要
Sketch geometry=>几何, radius=>双精度浮点数, sigma=>双精度浮点数, angle=>双精度浮点数 使用给定半径和标准偏差 (sigma) 的高斯算子以给定角度绘制图像
Solarize geometry=>字符串, threshold=>双精度浮点数, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 否定所有高于阈值的像素
SortPixels
按强度升序对每条扫描线内的像素进行排序。
SparseColor points=>浮点数数组, method=>{Barycentric, Bilinear, Shepards, Voronoi}, 'virtual-pixel'=>{Background Black Constant Dither Edge Gray Mirror Random Tile Transparent White} 在提供的点周围插值图像颜色
拼接 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} 拼接图像
扩散 radius=>double, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} 以随机量位移图像像素
统计 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} 用邻域中的对应统计数据替换每个像素。
隐写术 image=>image-handle, offset=>integer 在图像中隐藏数字水印
立体 image=>image-handle, x=>integer, y=>integer 合成两张图像,生成一张包含立体图像对左右图像的合成图像
去除
去除图像中的所有配置文件和注释。
漩涡 degrees=>double, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} 围绕中心旋转图像像素
纹理 texture=>image-handle 要平铺到图像背景上的纹理名称
缩略图 geometry=>几何, width=>整数, height=>整数 将图像大小更改为给定尺寸并删除任何关联的配置文件。
阈值 threshold=>string, channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 对图像进行阈值处理
色调 fill=>color name, blend=>string 用填充色对图像进行色调处理。
透明 color=>颜色名称, invert=>{True, False} 使图像中此颜色透明
转置
垂直翻转图像并旋转 90 度
横置
水平翻转图像并旋转 270 度
修剪
从图像中删除背景色的边缘
锐化遮罩 geometry=>geometry, radius=>double, sigma=>double, gain=>double, threshold=>double 使用锐化遮罩算法锐化图像。
晕影 geometry=>geometry, radius=>double, sigma=>double, x=>integer, y=>integer, background=>颜色名称 以晕影风格偏移图像边缘
波浪 geometry=>geometry, amplitude=>double, wavelength=>double, interpolate=>{undefined, average, bicubic, bilinear, mesh, nearest-neighbor, spline} 沿着正弦波改变图像
小波降噪 geometry=>geometry, threshold=>double, threshold=>double 使用小波变换从图像中去除噪声
白平衡 根据 LAB 颜色空间中的灰度世界假设对图像应用白平衡。
白阈值 threshold=>string, , channel=>{All, Default, Alpha, Black, Blue, CMYK, Cyan, Gray, Green, Index, Magenta, Alpha, Red, RGB, Yellow} 将所有超过阈值强度的像素强制为白色

请注意,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 的图像生成一个注释 MIFF:bird.miff 512x480,该图像的宽度为 512,高度为 480。

您可以选择将 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 integer 设置像素区域资源限制。
attenuate double 在向图像添加噪声时降低(或增强)噪声。
authenticate string 使用此密码解密图像。
background 颜色名称 图像背景颜色
blue-primary x-value, y-value 色度蓝色主点(例如,0.15, 0.06)
bordercolor 颜色名称 设置图像边框颜色
clip-mask image 将剪切蒙版与图像关联。
colormap[i] 颜色名称 位置 i 处的颜色名称(例如,红色)或十六进制值(例如,#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 设置图像文件句柄
文件名 string 设置图像文件名
fill color 填充色会绘制绘制形状轮廓内的所有区域。
font string 在使用文本注释图像时使用此字体
fuzz integer 在此距离内的颜色被视为相等
gamma double 图像的伽马级别
Gravity {Forget, NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast} 图像重力类型
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 将 Netscape 循环扩展添加到 GIF 动画中
label string 设置图像标签
loop integer 将 Netscape 循环扩展添加到 GIF 动画中
magick string 设置图像格式
map-limit integer 设置映射资源限制
mask image 将蒙版与图像关联。
matte {True, False} 启用图像 matte 通道
mattecolor 颜色名称 设置图像 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} 或 geometry 图像画布的首选大小和位置
pixel[x, y] string 位置 (x, y) 处的十六进制值(例如,#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 原始图像的宽度和高度
stroke color 描边色会沿着形状的轮廓绘制。
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 参数是 widthheight 参数的简写(例如,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 image geometry
height integer 图像的行数或高度
icc string ICC 配置文件
icc string ICM 配置文件
id integer ImageMagick 注册表 ID
IPTC string IPTC 配置文件
mean-error double 使用 Compare() 或 Quantize() 方法计算的每个像素的归一化平均误差
map integer 当前消耗的内存映射资源
matte {True, False} 图像是否具有 matte 通道
maximum-error double 使用 Compare() 或 Quantize() 方法计算的每个像素的归一化最大误差
内存 integer 当前内存资源消耗
MIME string 图像格式的 MIME 类型
蒙太奇 geometry 图像蒙太奇中的图块大小和偏移量
page.x integer 图像虚拟画布的 X 偏移量
page.y integer 图像虚拟画布的 Y 偏移量
integer 图像的行数或高度
签名 string 与图像像素流关联的 SHA-256 消息摘要
污染 {True, False} 如果图像已被修改,则为 True
total-ink-density double 返回 CMYK 图像的总墨水密度
transparent-color 颜色名称 设置图像透明色
user-time double 图像创建后以秒为单位的用户时间
版本 string 获取 PerlMagick 的版本
宽度 integer 图像的列数或宽度
XMP string XMP 配置文件
x-resolution integer 图像的 X 分辨率
y-resolution integer 图像的 Y 分辨率

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

上面列出的大多数属性在 magick 中都有类似项。有关这些属性的更详细说明,请参阅文档。

将图像与其重建进行比较

使用 Compare() 方法数学和视觉地注释图像与其重建之间的差异。该方法支持以下参数

比较参数
参数 描述
channel double 选择图像通道,默认情况下为除 alpha 之外的所有通道。
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 颜色名称 背景色名称
border integer 图像边框宽度
文件名 string 蒙太奇图像名称
fill 颜色名称 注释的填充色
font string X11 字体名称
frame geometry 用装饰性边框包围图像。
geometry geometry 合成图像中每个图块的首选图块和边框大小(例如 120x120+4+3>)
gravity NorthWest、North、NorthEast、West、Center、East、SouthWest、South、SouthEast 图像在图块中重力指向的方向
label string 为图像分配标签
mode Frame、Unframe、Concatenate 缩略图框架选项
pointsize integer Postscript 或 TrueType 字体的磅值
shadow {True, False} 在图块下方添加阴影以模拟深度
stroke 颜色名称 注释的描边颜色
texture string 要平铺到图像背景上的纹理名称
tile geometry 每行和每页的图块数(例如 6x4)
title string 为图像蒙太奇分配标题
transparent string 使图像中此颜色透明

请注意,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=>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() 合成一组图像,同时尊重任何页面偏移量和处置方法。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 个缩略图平铺,并在不同强度下应用图像处理操作。这可能有助于确定特定图像处理操作的适当参数。从以下操作中选择: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);

其中 parametersAnnotate 方法的任何参数。返回值为

  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() 向正在运行的 displayanimate 应用程序发送命令。唯一的参数是要显示或动画的图像文件的名称。

$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