ImageMagick 示例 --
其他杂项
- 索引
-
ImageMagick 示例前言和索引
-
插值 (像素间颜色查找)
-
虚拟像素 (缺失图像颜色查找)
-
随机的纯色斑点
-
Annotate 参数用法
-
拼接:创建新的图像操作符
-
边框、框架和 BorderColor 的使用
-
列表操作符测试
像素插值或像素间颜色查找
当在源图像中查找颜色时,使用“-interpolate
”设置,但该“查找点”落在源图像的像素之间。这在各种图像操作中进行,例如“-fx
”(DIY 特效操作符)和“-distort
”(广义图像扭曲操作符),以及其他相关的操作符,如 圆形扭曲。基本上,“插值”告诉 IM 如何解释来自图像的直接颜色查找,当该点与图像中的实际像素不完全匹配,而是落在像素之间的空间时。例如,如果您查找像素位置 3,4
处的颜色,则应该获得精确的像素颜色。但是,如果您在点 3.23,4.75
处查找图像的颜色,IM 应该返回什么?您应该获取 3,4
或 3,5
处的像素颜色?或者可能是周围像素颜色的某种混合,如果是,则应如何将颜色合并在一起?像素插值定义了 ImageMagick 在浮点位置(以像素坐标表示)查找单个颜色时应执行的操作。在某些方面,插值类似于像素重采样,例如 重采样滤镜 提供的。本质区别在于,重采样具有“比例”、“区域”或可变“窗口”,从中返回表示该区域中所有像素的颜色。插值不涉及“比例”,只有一个“点”查找,并且只有一个固定大小的“区域”围绕该点,从中确定该点要使用的颜色。当然,大多数区域重采样算法在重采样区域达到最小工作“窗口”时往往会退化为插值方法,当图像被放大或上采样时,这种情况自然会发生。这就是为什么插值滤镜和高斯模糊滤镜往往更适合放大图像。插值基本上是一种较低形式的采样,并且基本上用于当您需要对“什么颜色”问题做出简单快速的回答时。 简单的插值方法
这些是直接的、简单的方法,它们尝试尽可能少地返回要从“点插值”中使用的颜色。最简单的是“Nearest
”和“Integer
”,它只会从源图像中选择单个像素颜色,而没有任何混合或其他混合效果。这保留了图像的原始颜色值,但以产生混叠效应为代价,并且通常使图像看起来不太平滑。![]() ![]() |
从 IM v6.7.6-2 开始,您可以使用“Nearest ”作为“Nearest-Neighbour ”插值设置的简写。 |
Integer
”将简单地向下舍入查找点以选择像素,这会导致一般向右和向下平移半个像素。它通常仅用于源图像的简化“缩放”。另一方面,“Nearest
”将选择最接近浮点查找坐标的像素,因此产生更正确的结果。“Blend
”将根据它们与采样点的距离,将最近的 1、2 或 4 个像素混合在一起(平均)。结果是原始像素颜色仍然存在,但大小减半,而混合颜色的棋盘格填充了空白。(见下图示例)“Average
”实际上永远不会产生精确的颜色匹配,但始终会混合 4 个周围像素以产生局部平均值。这在颜色查找情况下可能很有用。“Average4
”也可以用作此插值方法的别名。“Average9
”类似,但会平均采样点周围最近的 9 个像素,产生模糊的结果。“Average16
”将平均采样点周围最近的 16 个像素,产生极度模糊的结果。以下是各种简单插值方法的摘要,用于放大一小群彩色像素或单个白色像素。原始图像看起来像“Nearest”结果,但要小得多。
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
整数 | 最近邻 | 混合 | 平均 | 平均9 | 平均16 |
---|
![]() ![]() |
在 IM v6.7.7-6 之前,“Average ”实际上等效于现在称为“Average16 ”的内容。其他两个平均插值器以及“Blend ”和“Background ”是在此时添加的。 |
Background
”,它只是为源图像的任何“采样”返回当前背景颜色。在许多方面,这相当无用,因为通常您最终只会得到一个空白的纯色图像。它的主要用途是作为更复杂的重采样函数的检查,例如重采样失败,其中 EWA 重采样滤镜(通常从广义扭曲操作符中使用)在重采样未能在其“支持”或重采样区域中找到任何像素时,将回退到插值查找。通过将插值设置为“Background
”并将背景颜色设置为突出的颜色(如“red
”),然后您可以查看结果图像中的像素,以查看重采样在何处“失败”或由于某种原因“错过了所有源图像像素”。通常是由于支持设置太小,或者玩弄了专家滤镜选项。未来:可能未来的插值选项是“随机”选择插值区域。可能对花哨的插值效果有用! 双线性
“Bilinear
”(或线性插值)是默认的插值方法,可能是从组合查找或采样点周围像素的颜色获得真实插值结果的最简单方法之一。这是一个解释双线性插值如何工作的图表。![[diagram]](../img_diagrams/bilinear_interpolation.jpg)
|
![]() |
|
![]() |
|
![]() |
网格
“-interpolate
”设置为“Mesh
”是“双线性
”插值的变体。虽然“Bilinear
”将生成一个三维曲面,“Mesh
”旨在将像素间区域分成两个平坦的三角形表面。将区域分成两个三角形是基于具有两个“最接近”角颜色的对角线。![]() ![]() |
有关“Mesh ”算法的详细信息,请参阅论文基于像素级数据相关三角剖分的图像插值。 |
|
![]() |
Mesh
”算法产生的颜色插值集几乎与“双线性
”完全相同。但是,如果我们反转黄色和青色…
|
![]() |
Mesh
”算法确定“blue
”和“cyan
”颜色是最接近的两个角,并在这两个角之间创建了一个对角线线性渐变。然后其余的颜色从这条线到其他两个角形成一个简单的扁平三角形渐变。这可能看起来像是一种不寻常的插值,但该方法确保当彩色图像仅稍微调整大小、旋转或剪切时,锐利边界仍然保持相当锐利。事实上,自适应调整大小操作(“-adaptive-resize
”)利用这一事实进行小的图像调整大小,以减少结果的过度模糊。例如,如果我们有一个“白色”角,“mesh
”假设已找到边缘并调整插值颜色以突出显示此边缘。
|
![]() |
|
![]() |
Catrom(Catmull-Rom)
“-interpolate
” 设置为 'Catrom
'(通常不精确地称为 'BiCubic
' 插值),在确定点查找的颜色方面更加复杂。基本上,它不仅查看像素间区域角点处的颜色,而且进一步查看超出那些最近邻像素的颜色。在采样点周围的 4x4 区域中总共有 16 个像素。基本上,它将曲线拟合到所涉及的整个区域,以便确定要使用的最佳整体颜色。这是一个可能更好地解释该过程的图表……![[diagram]](../img_diagrams/bicubic_interpolation.jpg)
|
![]() |
Bilinear
' 插值,但是结果具有更平滑的混合曲线,而不是直线来产生插值颜色。但是,此图像没有显示的是围绕我们四个近邻像素的其他像素的影响。为此,我们需要查看稍大的区域。对于此特定(非常小)示例,周围像素受 虚拟像素 设置控制。
magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel edge \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_edge.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel White \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_white.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel Black \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_black.jpg |
![[IM Output]](interpolate_catrom_edge.jpg)
![[IM Output]](interpolate_catrom_white.jpg)
![[IM Output]](interpolate_catrom_black.jpg)
![]() ![]() |
在真实图像中,虚拟像素 的影响通常只影响图像边缘附近的区域。由于此图像只有 2 个像素宽,因此上述示例受到强烈影响。在更大更典型的图像中并非如此。 |
![]() ![]() |
在非常强的颜色边缘上,这种环绕效应可能会被裁剪,从而导致一行可怕的像素。可以通过在不同于 'RGB ' 的颜色空间(例如 'Lab ' 或 'Luv ' 颜色空间)中进行调整大小和插值来防止此问题。有关此问题的更多信息和示例,请参阅 在 LAB 颜色空间中调整大小。 |
![]() ![]() |
请注意,'BiCubic '(插值 三次滤镜)是指一个非常庞大的滤镜系列,因此其含义非常不精确。但是它仍然可用,但其使用已弃用,取而代之的是更精确的名称。在 IM v6.7.7-7 之后,' BiCubic ' 只是 'Catrom ' 的别名,后者通常被认为是一个良好的“三次插值器”(b=0,c=1/2)。您应该使用名称 'Catrom ' 而不是 'BiCubic ' 以明确您正在使用什么进行插值。在 IM v6.7.7-7 之前,' BiCubic ' 实际上使用了极端的“Cardinal Cubic”滤镜(b=0,c=1),它具有过度强烈的负环绕效应。这已被 'Catrom ' 完全取代,并且不再可用作插值函数。在 IM v6.3.5-3 之前,' BiCubic ' 被实现为一个非常模糊的 'Spline ' 三次插值器。该滤镜已在此版本的 ImageMagick 中重命名。(见下文) |
样条曲线
“Spline
” 插值方法与上面的“Catrom
” 一样,也使用最近的 16 个像素。但是这是一个非常模糊的高斯式插值。
|
![]() |
Spline
” 插值的角点处的颜色被抑制了,因为插值曲面实际上并没有穿过这些像素的原始颜色。从本质上讲,它过度“模糊”,更准确地称为“B 样条”曲面。该曲面仍然是一种 三次滤镜(b=1,c=0),因为它使用分段三次曲线的技术生成。但是,此曲线仅接近原始像素颜色,尤其是在颜色变化剧烈的区域。也就是说,对精确整数像素位置的插值查找不会返回该像素的实际颜色,而是该颜色与周围像素的模糊。这通常被认为是不好的,但可以用作通用平滑函数。与“Catrom
” 一样,它也受周围像素的影响。
magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel edge \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_edge.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel White \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_white.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel Black \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_black.jpg |
![[IM Output]](interpolate_spline_edge.jpg)
![[IM Output]](interpolate_spline_white.jpg)
![[IM Output]](interpolate_spline_black.jpg)
![]() ![]() |
在真实图像中,虚拟像素 的影响仅在图像边缘。使用来自进行查找的像素间区域的真实像素。 |
Catrom
” 插值可能产生的任何负“环绕”效应。 插值背景
由于插值的影响通常在更大的区域内,因此这里提供了四种主要插值方法在周围像素为白色或黑色时的放大图。
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
双线性 | 网格 | Catrom | 样条曲线 |
---|
bilinear
” 插值颜色没有真正的影响。看起来它只是覆盖在任何存在的背景颜色上。但是,您可以看到“mesh
” 如何生成更强更锐利的边缘,但可以决定根据周围颜色翻转对角线,当它参与图像边缘时。查看红色和蓝色之间的连接处,白色和黑色背景之间的连接处以查看此“翻转”。“catrom
” 和“spline
” 的插值曲线受周围像素的影响。尤其是在涉及绝对颜色的测试用例中。最后,“spline
” 插值实际上只是图像的高斯模糊(使用 0.65 的 sigma)。足够的模糊以消除任何“环绕”或混叠效应,尽管通常它对于大多数用途来说过于模糊。参见 高斯滤镜。 旋转线的插值
在这里,我通过创建垂直线的图像,并使用仿射扭曲将线旋转 17 度,然后放大视图以查看生成的抗锯齿像素,来演示各种插值方法。
|
![]() 未旋转 |
![]() |
![]() 整数 |
![]() 最近邻 |
![]() 双线性 |
![]() 网格 |
![]() Catrom |
![]() 样条曲线 |
---|
Interger
” 和“NearestNeighbor
” 会产生高度混叠的结果,但仅使用图像中找到的原始颜色。两者之间的主要区别在于“Interger
” 倾向于将生成的图像向下和向左移动半个像素。“Bilinear
”、“Mesh
” 和“Catrom
” 通常会产生非常好的类似结果(稍后详细介绍),后者会产生一条非常锐利的旋转线。通常认为这些方法中的任何一种都是一个好的解决方案。“Spline
” 插值方法会使细线产生明显的模糊,从而消除混叠效应。但是,“Spline
” 倾向于过度模糊结果,并且实际上更适合平滑渐变,而不是旋转线。![]() ![]() |
特殊设置“-filter point ” 在上述示例中用于确保 扭曲运算符 仅在确定最终像素颜色时使用单点插值。否则,将使用 区域重采样 而不是 插值查找,尽管这也会产生非常好的结果。 |
![]() ![]() |
请注意,我没有在这些示例中使用“-rotate ” 运算符,因为该运算符使用像素剪切方法来 旋转 图像。因此,不使用像素插值。请参阅 旋转细线,了解以这种方式使用“ -rotate ” 运算符的示例以及产生的像素级效果。更新:从 IMv7.7.3-4 开始,旋转运算符现在在内部使用 扭曲运算符,因此上述内容可能不再适用。 |
旋转边缘的插值
与单个像素行相比,当区域的边缘被扭曲时,结果会略有不同。
|
![]() 未旋转 |
![]() |
![]() 整数 |
![]() 最近邻 |
![]() 双线性 |
![]() 网格 |
![]() Catrom |
![]() 样条曲线 |
---|
Bilinear
” 和“Mesh
” 为一般旋转生成相当锐利的边缘,而“Catrom
” 将在扭曲的图像中生成更锐利的边缘。“Spline
” 然而将产生更模糊的边缘。“Bilinear
” 和“Mesh
” 之间的差异在上述情况下非常小。这两种方法仅在扭曲操作期间极度放大的情况下才会产生可见的差异。否则,您只会看到像素强度略微几乎无法察觉的变化。虚拟像素错过的图像颜色查找
许多运算符通常需要查找超出图像本身边界的颜色。这包括 模糊图像、一般图像扭曲、形态和卷积运算符、一般扭曲运算符 甚至非常旧的 内爆运算符 的运算符。因此,如果您请求 -22,-3 处的像素,应该返回什么颜色?这样的像素实际上并不存在,但是返回的颜色值会对图像处理的整体效果产生深远的影响,尤其是图像实际边缘附近的像素的最终颜色。“-virtual-pixel
” 设置定义了当访问图像正常边界之外的像素时,IM 应该返回什么。 ![[IM Output]](../images/tree.gif)
-fx
” 来“查找”并显示小图像中和周围的所有像素,以便我们可以看到默认“-virtual-pixel
” 设置返回的内容。
|
![]() |
Edge
' “-virtual-pixel
” 设置返回请求的“虚拟”位置最近的真实像素的颜色。也就是说,最近的“边缘”颜色。这次我将使用更快的 使用视口的图像扭曲 来显示周围的虚拟像素,而不是速度慢得多的 FX 运算符。“SRT 0” 扭曲方法实际上不会扭曲图像结果,它只是查看图像运算符实际看到的像素,尤其是围绕源图像的“虚拟”像素。
|
![]() |
Edge
” 虚拟像素设置是默认设置,因此以上示例应该与前一个示例相同。此设置在处理图像时通常影响最小(就边缘效应而言)。这也是它被选为默认设置的原因。当使用模糊或其他使用“邻域”或像素进行处理的形态学和卷积运算符时,这一点尤其重要。需要注意的是,角像素的颜色最终将完全填充实际图像周围的对角相邻区域。这可能导致单个角像素对各种图像变换产生很大影响。这种“角”效应在模糊图像时尤其明显。 “Tile
” VP 设置对于生成和确保图像处理边缘效应围绕图像边界环绕非常有用。
|
![]() |
Mirror
” 与“tile
” 非常相似,并且对于某些效果可能比默认的“edge
” 更好。
|
![]() |
![]() ![]() |
直到 IM v6.5.0-1,只有直接附加到原始图像的图像被镜像。其他虚拟副本,远离原始副本的副本保持未镜像(正常的平铺模式)。这个问题已得到修复,因此整个虚拟画布空间现在已正确地镜像平铺,而不仅仅是相邻的虚拟副本。 仅当将镜像平铺与通用扭曲运算符一起使用以镜像平铺非常大的区域时,例如当查看远方地平线时,它才会变得重要。 |
Transparent
” 仅对真实图像边界之外的像素返回透明颜色。
|
![]() |
none
” 或“完全透明的黑色”是默认的透明颜色。例如,这里我错误地关闭了透明度……
|
![]() |
Transparent
” 设置对于图像扭曲尤其有用,其中扭曲的图像稍后将“分层”以构建更大的图像。例如,3D 仿射立方体 和 3D 透视盒。 “white
”、“gray
” 和 “black
” 设置类似于上面的 “Transparent
” 设置。它们只是为超出边界的任何像素返回该特定颜色。
|
![]() |
|
![]() |
|
![]() |
-background
” 设置中定义该颜色,并使用“Background
” “-virtual-pixel
” 设置。
|
![]() |
“
HorizontalTile
” VP 设置作为一种特殊的平铺形式添加到 IM v6.4.2-6 中,它对于完整的 360 度“Arc
” 和 “Polar
” 扭曲很有用。图像仅水平平铺,而平铺上方和下方的虚拟像素则从当前的“-background
” 颜色设置。
|
![]() |
HorizontalTileEdge
”(在 IM v6.5.0-1 中添加)也跨虚拟空间水平平铺图像,但复制侧边缘像素到虚拟画布空间的其他部分。
|
![]() |
Arc
” 和 “Polar
” 扭曲,其中环绕的图像“环绕”并首尾相连。同样,“
VerticalTile
” VP 设置(也添加到 IM v6.4.2-6 中,为了完整性)仅垂直平铺图像,并使用当前的“-background
” 颜色填充图像的侧面。
|
![]() |
VerticalTileEdge
” 添加在 IM v6.5.0-1 中,并复制侧边缘像素到虚拟画布空间的其余部分。
|
![]() |
CheckerTile
” 以平铺图像,就像填充棋盘图案一样。其他方块只是用背景颜色填充(可能是透明的)。
|
![]() |
还有一些更不常见的“
-virtual-pixel
” 设置。 “random
” 只是随机选择图像中要使用的像素。
|
![]() |
-blur
” 一起使用,以在生成的边缘效果中生成粗糙的斑驳平均图像颜色。请注意,像素值不一致,并且每次查找甚至每次运行操作都会产生不同的效果,除非随机数生成器给出了初始“-seed
”。当与卷积或形态学图像处理一起使用时,这一点尤其糟糕,因为沿着图像边缘的每次查找都会贡献不同的值,即使使用了相同的像素查找。但是,我发现随机模式在生成透视地平线时非常好,因为该模式在您越靠近地平线时会显示出更模糊的结果。模糊使生成的随机纹理具有深度,否则如果使用简单的纯色则不会可见。“
dither
” 返回基于请求位置 32x32 像素内的像素的颜色有序抖动图案。这意味着一旦您从图像移动到 32 个像素之外,结果将再次只是图像的角像素颜色。它有点像“edge ” 和 “random ” 的合并。
|
![]() |
random
” VP 在靠近图像时的一种更有序的形式,但在处理超出图像本身 32 个像素之外时,其效果更像是“edge
” 的效果。虚拟像素和无限
您可以更清楚地看到“-virtual-pixel
” 的效果,尤其是在通用扭曲运算符的结果中,尤其是在透视扭曲中,允许您创建扭曲的视图到无限远处。例如,这里我展示了“-virtual-pixel dither
” 设置对树的透视视图的结果。这显示了此设置如何影响返回到无穷远的所有像素。
magick tree.gif -mattecolor DodgerBlue -virtual-pixel dither \ -set option:distort:viewport 150x100-50-50 \ -distort perspective '0,0 9,0 31,0 38,0 0,31 0,18 31,31, 40,18' \ perspective_dither.gif |
![[IM Output]](perspective_dither.gif)
-virtual-pixel
” 设置以更好地了解它们的工作原理。在查看远方地平线中还可以看到其他一些示例。请注意,上面视图中的“天空”实际上是从“-mattecolor
” 设置生成的,扭曲使用该设置来表示“无效”区域,在本例中为透视扭曲的“天空”。它不是来自“-virtual-pixel
” 设置。虚拟像素颜色
没有一种“-virtual-pixel
” 方法实际上会返回与图像中已存在的颜色不同或复合的颜色,除非通过以下某种纯色方法专门请求该颜色:“background
”、“transparent
”、“background
”、“black
”、“white
”、“gray
”;也就是说,永远不会生成新的颜色,尽管可以添加一种特定颜色(通用扭曲运算符 有两种)。当然,如果请求的像素正在像素插值或区域重采样,例如上图中的透视扭曲视图,则这些方法可能会根据所选的“-virtual-pixel
” 设置合并返回的颜色。虚拟像素对运算符的影响
在这里,我探讨了“-virtual-pixel
” 设置对各种运算符的影响。“-blur
”……
|
![]() |
|
![]() |
-blur
” 和“-virtual-pixel
” 设置“tile
” 使图像发生交叉污染。当然,如果图像一开始就是可平铺的,这可能是期望的结果。
|
![]() |
-virtual-pixel
” 设置特定颜色会产生一些非常有趣的效果和可能性。
|
![]() |
|
![]() |
-gaussian
” 的基本结果与“-blur
” 相同,这是可以理解的,因为它们在数学上是相同的。
|
![]() |
-radial-blur
”(实际上是旋转模糊)会产生更有趣的边界效果……
|
![]() |
-motion-blur
” 可能会受到边缘效应的严重影响。![]() ![]() |
更糟糕的是,“-motion-blur ” 目前不了解“-channel ” 的使用,以将其效果限制在特定通道。 |
|
![]() |
|
![]() |
|
![]() |
虚拟像素的内爆效果
以下是一些使用各种“-virtual-pixel
” 设置的各种大值(>1.0)内爆的更有趣的示例。
|
内爆 | 边缘 | 平铺 | 镜像 | 抖动 | 随机 | 灰色 |
---|---|---|---|---|---|---|
2 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
10 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
50 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
500 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
-implode
”操作符使用的直接“插值采样”的直接结果。参见直接插值查找。这可能会在 IM 的未来版本中发生变化,使用区域重采样。目前,您需要使用超级采样技术来改进结果。“edge
”设置是更常用且默认的设置,用于避免大多数奇怪的效果。其他设置(除了“background
”之外)本质上会从图像中现有的像素生成重复的图案,并且效果差异很大。还要注意,参数需要大小呈指数级增长才能获得类似的效果增长。此外,对于大于约 200 的参数,结果图像的中心可能会出现黑色圆圈。这是因为计算机的数学极限已达到。我们不建议您使用如此大的值。随机的纯色斑点
通过模糊“plasma:fractal
”画布,然后将颜色减少到非常低的值,您可以生成包含不同颜色随机区域的简单图像。但是,结果会根据请求的最终颜色数量和虚拟像素设置(见上文)而有很大差异。在这个实验中,我有两个选择作为初始随机图像。一个分形等离子体图像和一个随机噪声图像。随机图像本质上会生成一个图像,该图像(使用“tile” “-virtual-pixel
”设置)可以创建更好的可平铺图像。而等离子体图像倾向于在其颜色斑点处创建类似矩形的边缘。另一方面,等离子体图像会产生相当漂亮的柔和色斑点或斑块。而随机图像倾向于产生可怕的中灰色调。因此,我选择使用等离子体图像进行这些实验。
|
颜色数量 | 边缘 | 镜像 | 平铺 | 白色 | 黑色 |
---|---|---|---|---|---|
2 |
![]() |
![]() |
![]() |
![]() |
![]() |
3 |
![]() |
![]() |
![]() |
![]() |
![]() |
4 |
![]() |
![]() |
![]() |
![]() |
![]() |
5 |
![]() |
![]() |
![]() |
![]() |
![]() |
Edge
”和“Mirror
”倾向于导致颜色以 90 度角连接边缘。“Random
”或“Dither
”设置具有类似但更强的颜色斑点与图像边缘的连接,尽管两者也都会在靠近图像边缘的地方引入一些锐利的边缘效果。可能需要第二个模糊量化循环来清理和平滑斑点的边缘。“Tile
”设置倾向于允许斑点环绕图像。但是,由于源等离子体图像本身不可平铺,因此结果是在矩形边缘附近发生一般的颜色变化。如果使用可平铺的随机图像作为源,则颜色斑点将完全忽略图像的边界。通过使用“White
”或“Black
”背景虚拟像素设置,颜色斑点倾向于集中在图像主体中。这种“居中”效果的程度取决于原始随机图像相对于所用“背景颜色”的差异程度。“-blur
”的大小基本上会影响斑块的大小和平滑度。小的模糊会产生许多小斑点,大的模糊(如我们在上面使用的)会产生单个更圆形的色斑。您还可以通过使用不同的颜色量化颜色空间来生成完全不同的颜色和交互。例如,这里我重复了上面最后一个示例(减少到 5 种颜色),但使用了一些更不常用的“
-quantize
”颜色空间进行颜色选择。(参见颜色量化和颜色空间)请记住,以上所有图像均是从相同的随机源图像生成的。您看到的不同效果是减少图像中颜色数量的不同方式的结果。您可以看到“-virtual-pixel
”设置定义模糊在图像边界之外的区域中看到哪些像素颜色对颜色区域的形状有很大影响。注释参数用法
IM 版本 6 提供了一个用于文本绘制的新命令行选项“-annotate
”,它绕过了旧的“-draw
”方法来直接使用 Annotate()
API。这为命令行用户提供了一些新功能。在此示例中,我选择了 Arial Black 字体,因为它具有直线字体,因此旋转应该非常清晰。
|
![]() |
-annotate {SlewX}x{SlewY}+{X}+{Y} 'Text String'上述X和Y偏移量是将要绘制的带注释文本的重力影响位置。但是,SlewX和SlewY表示一种旋转形式。如果这两个值相同,则执行正常的旋转。但是,如果它们不同,则可能会产生一些非常有趣的效果。如您所见,一些参数导致没有绘制任何文本,基本上是在文本将全部在一行中绘制时。这是可以预料的。但是,您可以看到我们可以将文本翻转、折叠、旋转、斜体化,以各种方式进行绘制。一个非常有用的图像操作符。
拼接:创建新的图像操作符
就在 ImageMagick 版本 6 首次发布后,针对一个问题展开了讨论。这个问题涉及在图像中间添加额外的空间(行和列)。以下示例是在此讨论中产生的复杂命令集,使用了 IM 版本 6 的强大功能,并详细说明了应该执行的操作。从此示例中创建了“-splice
”操作符(有关详细信息,请参阅将行和列拼接和裁剪到图像中中的示例)。因此,此命令行是此新命令的定义操作,两者都应以完全相同的方式工作。
|
![]() |
边框、框架和 BorderColor 的使用
存在一个争论,即“-bordercolor
”应该仅用于使用“-border
”或“-frame
”向图像添加边框。也就是说,许多用户认为它不应该用于设置具有透明度的图像后面的背景。例如,在 IM 下,这会将星形图像的透明区域设置为“-bordercolor
”,并完全忽略“-background
”颜色设置。
|
![]() |
使用“-bordercolor ”设置透明图像背景的主要原因是,这使得“magick montage ”在给定一组可能包含透明度的随机图像时以一种不错的方式输出,而用户无需进行最少的设置。
|
![]() |
magick montage
”结果将看起来不那么好。这并不意味着在使用“-border ”或“-frame ”操作符时无法保留图像的透明度。这仅仅意味着您需要提供额外的“-compose ”设置来告诉 IM 保留透明度。
|
![]() ![]() |
-border
”或“-frame
”的同时保留图像透明背景的更多信息,请参阅添加边框。对于“magick montage
”,请参阅montage 背景和透明度处理示例。有人建议的另一种方法是在这些操作符中将图像区域背景设置为“-background
”颜色,但这会干扰其在“magick montage
”中的使用。当然,您始终可以在添加任何额外的框架或边框之前自己删除图像的透明度。在这种情况下,“-compose Copy
”的使用变得无关紧要。
|
![]() |
-compose
”设置保留透明度,而不是让边框保留透明度并导致其他问题,这要容易得多。对于新用户来说,这可能并不明显,但这就是这些示例页面存在的意义。列表操作符测试
以下所有命令都应生成完全相同的图像,但所有图像的生成方式略有不同,演示了新的 IM 版本 6 图像列表操作符。
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |