安装 • 概述 • 示例脚本 • 读取或写入图像 • 操作图像 • 设置图像属性 • 获取图像属性 • 将图像与重建图像进行比较 • 创建图像蒙太奇 • 使用 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*diameter和0.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 | 对比度受限自适应直方图均衡化。width,height将图像划分为瓦片。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| 的像素设置为 -epsilon 或 epsilon(以哪个更接近为准),否则像素值保持不变。 |
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 参数是 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 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 参数是 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 | 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 参数是 width 和 height 参数的简写(例如,geometry=>'106x80' 等效于 width=>106, height=>80)。
MontageImage() 是 Montage() 方法的别名。
上面列出的大多数属性在 montage 中都有类似的属性。有关这些属性的更详细描述,请参阅文档。
处理 Blob
Blob 包含直接表示内存中而不是磁盘上的特定图像格式的数据。PerlMagick 支持所有这些图像 格式 中的 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);
其中 parameters 是 Annotate 方法的任何参数。返回值为
- 字符宽度
- 字符高度
- 升高
- 下降
- 文本宽度
- 文本高度
- 最大水平前进
- 边界:x1
- 边界:y1
- 边界:x2
- 边界:y2
- 原点:x
- 原点: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() 向正在运行的 display 或 animate 应用程序发送命令。唯一的参数是要显示或动画的图像文件的名称。
$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