ImageMagick 示例 --
合成图像
- 索引
- ImageMagick 示例前言和索引
- IM 中的图像合成
- 定位叠加图像
- 合成方法的原始表格 (单独页面)
- Duff-Porter Alpha 合成方法
- 数学合成方法
- 照明合成方法(灯光、闪避、加深)
- 通道复制方法
- 将一个图像溶解到另一个图像上
- 将两个图像混合在一起
- 水印或调制图像
- 使用蒙版限制合成区域
- 使用图像图块合成
- 特殊合成方法
- 图像映射合成方法
magick composite
”命令执行。它也可以作为一系列操作的一部分或由其他图像操作符在内部执行。IM 中的图像合成
图像合成是将两个(并且只有两个)图像以各种方式合并的过程。它与Alpha 合成相关,后者根据叠加的透明部分描述结果。图像合成用于混合和平均图像、传输图像通道、剪切、连接或分层图像的不规则形状片段。或者,作为复杂数学运算的一部分。有关图像合成的另一个很好的介绍是 SVG Compositing in 30 Minutes。或者,您可以通过阅读 SVG Alpha Compositing 页面来发现精确的数学细节,该页面描述了更重要的图像合成方法。以下命令是 ImageMagick 中可用的两种直接图像“合成”方法...
magick composite {overlay} {background} [{mask}] [-compose {method}] {result} magick {background} {overlay} [{mask}] [-compose {method}] -composite {result} |
magick composite
”命令是 IM 中合成图像的传统方法。拥有专门的命令表明图像合成是多么重要。 “magick
”运算符“-composite
”也可以将图像合成作为更大的图像处理任务的一部分。</> 请注意,使用“magick
”时图像的顺序颠倒。该顺序很实用,因为您通常使用主画布,在该画布上准备和合并图像以形成新图像。图像的顺序很重要。在 多张图像的图层 中可以查看两种技术(以及更多)的实际示例,建议在继续之前阅读这些示例。 定义和术语
更重要的图像是背景图像,也常称为目标图像,它是被图像合成修改的图像。背景不仅设置了图像合成的最终尺寸,而且还保留了元数据,例如“注释”、“标签”、“密度”、“配置文件”等。它的位置是固定的,通常形成您正在构建的画布,因此被称为背景。请记住这一点!叠加图像或源图像控制“-compose
”方法应如何修改固定的背景或目标图像。可以相对于固定的背景图像重新定位该图像(通常使用“-geometry
”和“-gravity
”设置)。但是,叠加图像及其包含的任何元数据在合成操作完成后都会被删除。
compose:outside-overlay
”(参见 外部叠加设置),将其设置为“false
”值以禁用对叠加图像覆盖的矩形区域之外的背景图像的任何修改。如果没有此设置,某些合成方法将清除未被叠加图像覆盖的区域,作为合成定义的一部分。实际合成方法由“
-compose
”设置控制,该设置默认为“Over
”值。也就是说,源图像被绘制在背景图像之上,这正是大多数人在执行图像合成时想到的。IM 示例的这一部分大部分用于详细说明各种合成“方法”的作用以及如何使用它们。要查看合成方法的结果,请参阅 合成方法表格。这些表格没有说明该方法的预期用途,只是从各种测试图像中获取的原始输出。合成方法不区分大小写,并且“_
”或“-
”字符是可选的。因此,合成方法“Dst_Over
”也可以指定为:“dst_over
”、“dst-over
”、“DstOver
”、“dstover
”甚至“dstOVER
”。它们的意思都一样。此外,合成方法:“Over
”、“ATop
”、“In
”和“Out
”是更详细的合成方法名称:“Src_Over
”、“Src_ATop
”、“Src_In
”和“Src_Out
”的缩写。除了大量的“-compose
”方法之外,还有一些方法需要额外的数值参数才能正常工作。在“magick composite
”命令中,这些参数使用特殊的选项传递:“-dissolve
”、“-blend
”、“-watermark
”(“modulate
”)、“-displace
”和“-distort
”。从 IM v6.5.3-4 开始,“magick
”命令可以使用 定义设置“compose:args
”将特殊参数传递给“-composite
”运算符。有关示例,请参阅下面的特殊 溶解 和 混合 方法。 图像合成操作符
除了上面显示的直接两种图像合成样式之外,还有许多其他图像操作也在其内部图像处理过程中使用 Alpha 合成。这些操作受当前“-compose
”设置的影响,但它们将使用自己的内部定位或 分层图像 虚拟画布偏移定位技术。以下是已知受合成设置影响的所有运算符的列表...
- 图像对的合成
- 使用主要图像合成运算符的实际示例,包括原始的“
magick composite
”命令,以及“magick
”的“-composite
”运算符。这种低级方法使用 几何/重力设置 来确定叠加图像的位置。- 分层运算符
- 图像“layerimage”运算符“
flatten
”、“mosaic
”和“-layers merge
”将当前图像序列中的所有多个图像叠加到单个新画布上,该画布的尺寸和位置由所选的分层运算符决定。这使用 虚拟画布/页面偏移设置 来确定叠加图像的位置。- 边缘扩展运算符
- 在内部准备的画布上叠加每个单独图像的运算符。这包括“
-border
”、“-frame
”和“-extent
”等运算符。(参见 添加/删除图像边缘)。不使用任何定位信息,但“-extent
”将使用重力和几何偏移量将图像叠加到纯色背景图像上。- 绘制图像
- “
-draw 'image...'
”图像叠加方法将在一个外部源图像上叠加一个外部源图像。这是“mogrify
”唯一可用的图像合成技术。它从外部源获取“叠加”图像,使其能够克服该命令的无列表运算符限制。用户还会提供大小调整和定位信息,这些信息可能受到重力的影响。- 多列表图层合成
- “
-layers composite
” 运算符允许您将两个独立的多图像列表组合在一起,一次组合一对图像,以形成一个新的合并的多图像序列。 它还可以将图像序列与单个图像(可以是静态的“叠加”图像或静态的“目标”图像)组合。 它也是唯一允许您同时使用通用“-gravity
” 影响的“-geometry
” 偏移量(全局)和虚拟画布“-page
” 偏移量(从全局位置)。 这个合成运算符对于合成 图像动画 或其他图像序列作为整体尤其重要,而不是需要脚本每次处理一对图像。
定位叠加图像
合成几何/重力设置
在正常的 Alpha 合成中,“-geometry
” 设置与“-gravity
” 一起使用以定位源图像相对于目标图像。 使用这些设置在 使用重力定位图像 中有详细介绍。 请注意,“-geometry
” 的大小组件很特殊,因为它会 调整图像大小(几何形状)。 在“composite
” 中,它会调整源图像的大小,但在“convert
” 中,会调整图像序列中最后一个图像的大小。 从技术上讲,这是 图像合成 的一个独立方面。 请参阅 几何形状调整大小 和 使用合成叠加图像。 在 Alpha 合成中,只涉及两个图像,即“源”和“目标”(或“背景”),尽管也可以提供第三个 蒙版图像 来限制合成所影响的区域。 图层画布/页面偏移
叠加图像的合成采用截然不同的理念。 所有图像(数量不限)在给定的顺序中被平等对待。 它们都有一个“-page
” 或 页面偏移,它相对于虚拟画布“原点”(默认偏移量)定位每个图像的左上角,但没有重力。 为了处理多个图像,会使用当前的“-background
” 颜色生成一个新的背景图像,其大小取决于要执行的操作。 假设这是“目标”图像(画布)。 所有图像都以序列方式一次一个地合成到这个新画布上。 即使只给出两个图像,也会创建一个新图像,并应用两个单独的合成。 也就是说,它可能很慢。 所有图像都被视为“源”图像,它们列出的顺序决定了结果。 但是,“图层”偏移量不受重力影响。 由于每个图像都可以有单独的“画布偏移量”,因此多图像合成最好使用 图像图层运算符 以及 多图像序列合成 来应用动画。 这两种样式是截然不同的定位技术,您需要使用正确的样式来适应您计划使用的合成技术。 两种定位技术
只有一种合成技术,即多图像列表 图层合成 运算符,允许您同时使用两种定位方法。 首先,使用“-geometry
” 和“-gravity
” 对两个列表进行全局定位,这会应用于每个列表中第一个图像的虚拟画布大小。 然后,使用“-page
” 从该全局位置偏移列表中的每个单独图像,以确定最终位置。 当然,如果叠加图像不适合提供的图像中特定目标图像,那么它将被该图像剪切。 因此,通常最好只对目标图像使用完全合并的图像,以达到所需的大小。 当然,之后可以再次修剪结果图像的大小。Duff-Porter Alpha 合成方法
Duff-Porter 图像合成方法是一组传统的 12 种方法,定义非常明确。 它们被称为 Alpha 合成,因为图像根据图像透明度或“Alpha 通道”的某些方面进行合并。 您可以在 SVG Alpha 合成 文档中找到这些方法的数学定义。 这是一个经典表格,显示了这 12 种方法使用两个三角形图像的结果。Over
”,这是大多数人在合成图像时通常想要的。 为了理解和记住上述每种合成方法的作用,结果图像将与您所说的一样......{Source} --{compose_method}--> {background}
ATop
” 方法的结果图像相当于“叠加图像“ATop
”在背景图像上”。 也就是说,背景图像会保留其“形状”,但源图像的颜色会“叠加”在背景图像上。 但是请记住,使用“magick -composite
” 运算符时,图像顺序是相反的。 这 12 种方法不仅定义了结果中哪两个图像“可见”,而且还定义了它如何影响源图像未覆盖的图像部分。 也就是说,原始“背景”是否保持原样或完全清除。 我故意将上面表格中的“目标”图像做得更大,以便您可以看到图像的其余部分是否被清除。 这些“清除”方法是:Src
、In
、Dst_In
、Out
、Dst_ATop
和 Clear
。 从 IM v6.5.3-4 开始,您可以使用 定义设置 “compose:outside-overlay=false
” 来防止 Duff-Porter 合成清除目标图像覆盖区域之外的部分。 请参阅“Copy
” 和“Clear
” 合成方法以及 外部叠加设置 中的示例,了解详细信息。 请注意,“Copy
” 是 IM 提供的特殊的“第 13 种”合成方法。 从根本上讲,它等同于“Over
” 合成,但在覆盖区域中禁用背景清除。 但是,在实现方面,它是一个“Src
” 合成,并且禁用了外部叠加(或背景清除)。ImageMagick v5 及更早版本不会清除源图像未覆盖的任何区域。 这是对 Duff-Porter 合成运算符的错误处理,并在 IM v6 开发过程中得到纠正。 |
CopyOpacity
”,它完全替换了图像的 Alpha 通道,并且可能会使未定义的不可见颜色变得可见。 Over(叠加图像在背景上)
这是默认的合成方法,是每个人在将一个图像叠加到另一个图像上时都会想到的方法。 叠加图像以与“动画单元格”或“顶部透明度”以相同的方式放置在背景图像“之上”,它们可以放置在背景场景或图像上。 它太常见了,我怀疑我真的不需要多说。 因此,让我们提供一个将单个字母图像叠加在背景图像上的示例。
|
|
-geometry
” 设置进行精确定位。 如果它位于背景边界之外,它将被剪切或忽略,具体取决于情况。 在此示例中,使用“convert -composite
” 运算符叠加图像,但定位在背景上方一半的位置。 请注意图像顺序的颠倒。
|
Dst_Over(将图像“放在”背景“下方”)
与其他“Dst_” 方法类似,此方法的工作原理几乎与“Src_” 版本完全相同,但叠加和背景图像交换了位置。 因此,“Dst_Over
” 等同于将源叠加图像放置在目标“下方”。 结果是,只有源图像或叠加图像不被目标图像或背景图像隐藏的部分才会可见,因为它们从下方露出。 这与“Over
” 交换参数图像并不完全相同,因为大小、定位和其他图像元数据仍然来自背景图像或目标图像。 请记住,输出图像大小与“背景”图像相同,源图像的位置相对于背景(使用“-geometry
” 和“-gravity
”)。 例如,这里我们将一个黑色“A”标签“放在”我们原始的白色 A 下方。 我们可以将黑色 A 相对于白色 A 背景重新定位。 正如您所看到的,这非常适合添加硬阴影,而无需担心扩展图像大小。
|
|
-tile
” 设置的“magick composite” 也使得这种形式的“over”非常有用,因为它是一种在图像下方平铺的方式。 例如,将内置的棋盘图案平铺在我们刚刚创建的阴影字母下方。
|
Src(“裁剪”到背景图像尺寸)
此运算符完全用叠加图像替换背景图像。 背景中的颜色和透明度被完全丢弃,留下一个与原始目标相同大小的空白图像,源图像被应用到该图像上。 但这有什么用呢? 好吧,有两件事。首先,您实际上是用源图像替换了背景图像,但保留了与原始背景图像相关联的所有元数据。 也就是说,图像发生了变化,但元数据没有变化。 其次,即使图像内容发生了变化,最终图像的大小也不会改变。 也就是说,结果图像的大小与原始背景相同。 因此,您可以有效地使用此运算符对源图像或叠加图像进行裁剪或添加边框,使其与给定的背景图像(以及背景元数据)相同大小。 例如,假设您想要制作一个等离子图像,并将其剪切,使其与内置的玫瑰图像相同大小。 这将使您能够执行此操作,而无需知道玫瑰图像的确切大小。
|
-crop
”,而不是“调整大小”。 原始图像的元数据也保留下来。 也就是说,即使现在是等离子图像,图像元数据仍然表明它是“玫瑰”图像,并且来自“rose:” 图像源。如果叠加图像小于背景图像,则用透明度替换背景图像的其余部分以填充它。 但是请注意,背景必须具有 alpha 通道,否则它将用黑色(“none”或“transparent”在没有 alpha 通道的情况下具有的颜色)填充额外的空间。
|
|
Copy(复制或替换图像)
此运算符不是 12 个“Duff-Porter”合成方法之一,这就是它不在上面图表中的原因。然而,它非常重要。它的工作方式与“Src
”合成方法完全相同,但它不会触及覆盖区域之外的背景图像。也就是说,它将复制能力限制在覆盖的区域内,而不会触及其他区域。这使您可以裁剪较大图像的一小部分,为了速度而对较小图像进行处理,然后将结果“复制”回较大图像,而不会触及该图像的其他区域。反过来,这使您可以优化非常大图像的图像处理。以下是我上面使用的相同示例,但使用“Copy
”代替“Src
”,显示 IM 如何不会浪费时间清除“Duff-Porter”算法要求的其余背景。
|
Over
”非常相似,只是源图像的透明度也被复制,完全替换了背景图像。如果没有透明度,它的执行方式将与“Over
”完全相同。在内部,它修改了特殊的合成控制设置“outside-overlay
”(参见下一项)。外部覆盖设置
从 IM v6.5.3-4 开始,通过定义“compose:outside-overlay
”,可以由用户控制合成方法是否也会影响覆盖区域之外的区域。它默认情况下是“打开”的,但您可以通过将它的值设置为“false
”来关闭它。例如,以下等效于Copy 合成方法,但使用更传统的Src 合成方法。
|
外部覆盖与 SVG“clip-to-self”
“compose:outside-overlay
”定义在很多方面类似于使用 SVG“clip-to-self”属性。两者都将合成限制在覆盖的区域内,而不影响目标图像的其余部分。但是 SVG“clip-to-self”仅适用于绘制区域(如蒙版),而 IM 的“outside-overlay”设置适用于源图像的完整矩形区域,该区域覆盖了背景图像。这在 SVG 合成手册中并不十分清楚,因为给出的示例解释得不好,使它们非常令人困惑。但是,如果您想尝试理解它们,请参见SVG 合成“clip-to-self”属性或理解 SVG 1.2 合成,clip-to-self。请注意,写入蒙版也可用于实现这种类型的控制,但使用根据给定蒙版的形状区域。在这方面,它更像 SVG“clip-to-self”属性,其中源图像也用作写入蒙版。Dst(一个“无操作”合成)
此运算符不执行任何操作。源或覆盖图像将被完全忽略,目标或背景图像将保持不变。此方法的真正用途是作为在其他图像运算符中“关闭”alpha 合成操作的一种手段。例如,我们使用Frame 运算符来为我们的玫瑰图像(具有透明背景)加框,但随后使用“-compose Dst
”来防止将图像添加到框架中。换句话说,我们只使用玫瑰来设置结果的内部框架的大小。框架,而且只有框架,才是结果。
|
-bordercolor
”定义框架内的颜色,该颜色通常放置在源图像下方。“Dst
”方法在脚本中也很有用,可以禁用大型复杂命令中的 alpha 合成,而无需创建两个不同的 IM 命令。Dst_In(或用源“蒙版”背景)
“Dst_In
”方法就像使用源图像作为背景图像的“Copy_Opacity
”蒙版一样。它将从背景图像中删除覆盖图像的形状,就像一个饼干模具从饼干面团中切出饼干的形状一样。例如,让我们使用上面的花哨的“A”作为蒙版来从玫瑰图像中切出它的形状。
|
Copy_Opacity
”方法不同,您不能使用灰度图像作为蒙版,因为在此操作中只使用覆盖图像的 alpha 通道。覆盖中的任何颜色都会被完全忽略。所有“Dst_In ”和“Src_In ”方法实际上所做的只是将两个图像的 alpha 通道相乘。相应图像的颜色(根据方法)将被保留。 |
Dst_Out(或“擦除”操作)
使用“Dst_In
”的“饼干面团”隐喻,“Dst_Out
”方法的结果是,一旦饼干被切出,留下的面团。它可以用来切割孔,或者从背景图像中咬出,使用覆盖的形状。覆盖中的任何颜色再次被完全忽略。
|
Dst_In
”和“Dst_Out
”,您可以像拼图一样将它们重新组合在一起(使用“Plus
”方法)。例如,这里我们“添加”(使用“Plus
”合成)上面生成的最后两个图像。此图像与原始的“rose:
”图像完全相同(到像素)。
|
-draw
”操作只能向图像添加颜色。一旦颜色应用于画布,它就不会删除颜色。想象一个在玻璃门或窗户上绘制广告的画家。他或她可以添加油漆,但不能通过在上面绘画来删除油漆。通过在透明画布上绘制要擦除的形状,您可以使用“Dst_Out
”将其从工作图像中删除。这有点像我们的画家用形状特殊的抹布小心地擦去湿油漆。该形状可以用来移除全部或部分颜色,使其变得完全或半透明。例如,假设您想在透明画布上绘制一个新月形的符号。这种 alpha 合成方法使这种难以绘制的形状易于绘制,方法是叠加两个圆形。
|
必须在括号中创建和绘制第二个图像。如果您不这样做,您会发现“-draw ”将绘制在覆盖图像和原始背景上,这显然是错误的。
如果您没有使用括号,您会发现擦除图像部分周围有一圈半透明的黑色像素。我知道,在我创建这个示例时,这让我自己很恼火。 |
ATop(“Over”,但裁剪到背景图像)
像“Over
”一样,但将结果限制在背景图像的原始形状内。换句话说,目标上的 alpha 通道保持不变,但图像颜色被源图像的任何不透明部分叠加。如果背景图像完全不透明(没有透明度),此操作将与正常的“Over
”合成完全相同。只有当背景包含透明度也会裁剪叠加时,它才有所不同。这样做的好处是,可以叠加仅限于目标对象(形状)的照明和阴影效果。例如,假设我们有一个红色圆圈,并想添加一个高光,就好像它是一个三维球体一样。我们可以创建圆圈和高光,然后使用“ATop ”叠加高光,以将其限制在圆圈内。
|
白色高光的创建使用“-negate ”来确保整个图像实际上是白色的。这样做是为了避免“-blur ”运算符中的一个错误,该错误已在 IM 版本 6.2.4 中修复。有关此旧错误的更多详细信息,请参见使用透明度的模糊错误。 |
|
ATop
”合成方法的更多示例,请参见生成 3D 徽标。Clear(清除背景。忽略覆盖图像)
这是一种不常见的合成方法,它本质上完全忽略覆盖图像,只是清除背景图像。这使其成为创建与背景图像大小相同的透明或黑色画布的理想方法,适用于复杂项目。由于覆盖图像未被使用,因此可以使用单个像素的“null:
”图像作为覆盖。
|
|
compose:outside-overlay
”允许您将此清除限制在覆盖的区域内,无论覆盖图像是否包含透明度。例如
|
Xor(清除共享区域)
这是一种非常奇怪且很少使用的合成方法。它叠加两个图像,然后将重叠区域清除为透明度。
|
|
FUTURE: Xor effects on semi-transparent images get extremely weird. Explore this and create an example demonstrating this weirdness.
数学合成方法
这组合成方法允许您对图像执行数学运算。这可能看起来没什么用,但对于图像的低级操作,这些方法使您可以做一些您通常不会想到的事情。与以前的Duff-Porter 图像合成方法不同,它们通常是灰度方法。也就是说,它们通常应用于图像,其中一个或两个图像都是灰度的,并且通常不包含透明度。也就是说,并不是说不能使用透明度(参见下面的数学合成和 Alpha),但这不是一种很常见的做法。数学合成的默认用法由 SVG 图像文件格式规范定义。您可以在SVG 合成指南 (2009)、Pegtop 混合模式和SimpelFilter:Photoshop 混合模式中了解更多信息。您在以下每个运算符旁边看到的特殊渐变图像以视觉方式显示了运算符如何影响颜色值。结果是通过将两个渐变图像合成在一起生成的,如下所示...
magick -size 64x64 gradient: gradient_src.png magick -size 64x64 gradient: -rotate 90 gradient_dst.png magick composite gradient_src.png -compose Multiply gradient_dst.png \ gradient_result.png |
Source |
目标 |
结果 |
乘
”通常会使图像变暗,并且任何输入图像中的黑色值(0)都会产生黑色结果。这可能非常有用。
乘 ( ) (使白色对图表/文本透明)
这是更实用的合成方法之一,但被低估了,它只是对两个图像的简单相乘。其公式当然为:Src*Dest
这意味着如果其中一张图像为纯白色,则结果将是另一张图像。另一方面,如果其中一张图像是黑色,则结果将是黑色。在这两个极端之间,一张图像会将目标图像的亮度降低给定量。请注意,“乘
”只会使图像变暗,永远不会使图像变亮。也就是说,它会将图像“衰减”为黑色,这使得这种合成方法成为一种“燃烧”风格的合成。(参见下面的照明合成方法)
|
|
0.5
”值的Gamma运算符,或具有“2.0
”值的Evaluate PowerOf运算。例如,参见星形生成器,以产生更逼真的星体强度分布。或者它可以在将结果叠加在地理地图上之前用于卫星云图像。 屏幕(使黑色对图表/文本透明)
这几乎完全类似于“乘
”,除了在合成之前两个输入图像都被取反,并且最终结果也被取反以将图像恢复正常。从技术上讲,这两种方法是彼此的“对偶”。这使其公式为: 1-(1-Src)*(1-Dest)
这意味着如果其中一张图像为纯黑色,则结果将是另一张图像。另一方面,如果其中一张图像是白色,则结果将是白色。在这两个极端之间,一张图像会将目标图像的亮度提高给定量。请注意,“屏幕
”合成只会使图像变亮,永远不会变暗。这是一种称为“闪避”的合成风格。(参见下面的照明合成方法)这种合成方法非常适合将白色文本叠加在黑色背景上,然后叠加到其他图像上...
|
|
凹凸贴图(灰度相乘)
“凹凸贴图
”方法本质上与“乘
”相同,只是源图像在叠加之前被转换为灰度。换句话说,它会在源图像变暗的任何地方使图像变暗。您可以将此视为一种“乘以强度”类型的运算符。例如...
|
hand_point.gif
”图像在应用之前是如何被灰度化的。它的最初目的是为图像添加纹理(例如纸张或织物纹理)。然而,由于它只能使图像变暗,因此不如“硬光
”方法有用,后者可以使图像变亮和变暗(参见下文)。 除、除_Dst、除_Src ( ) (去除阴影效果)
两个图像相互除。哪个图像除以哪个取决于是否应用“Divide_Src
”或“Divide_Dst
”。“Divide_Dst
”的公式为 Src / Dest
,而“Divide_Src
”的公式为 Dest / Src
由于图像合成中通常定义的图像顺序以及“magick composite
”命令,原始方法“Divide
”意味着...{Source} Divide {background}
Divide
”是“Divide_Dst
”的同义词,意思是“除以目标”。它也是用于定义显示的渐变图的运算符。请注意,图像的顺序非常重要,因为如果图像或运算符交换,您将获得截然不同的结果。对于“magick
”命令来说尤其如此,它将目标图像放在源图像之前。请记住,目标图像将定义最终的实际大小,以及两个图像的合成结果中的元数据。还要记住,源图像相对于目标图像定位。这种合成方法在去除照片中的晕影中最实用。在下一个示例中,我将它用作背景移除的方法。由于使用了归一化颜色值,这些颜色值通常在 0.0(黑色)到 1.0(白色)之间,因此除法实际上会使分子图像变亮,亮度取决于您“除以”的图像中出现的“黑色”的量。现在将两个图像相除,因此“分子”图像(不是运算符指定的图像)会变亮,这听起来可能很奇怪。然而,这是一个非常有用的操作。这意味着您可以有效地去除图像中由于镜头晕影、扫描不良或因年代久远而造成的色调而造成的暗斑。例如,我有一张手写文本的图像,该图像扫描得非常粗糙(使用没有闪光灯的数码相机,然后缩小尺寸以去除数字噪声)。纸张的边缘已经褪色,由于没有使用闪光灯,背景非常暗,并且由于纸张没有完全平整,因此出现了阴影效果。仅仅将图像归一化以增强图像对比度并不能帮助去除边缘颜色或其他阴影效果。但是,通过模糊图像以去除线条,然后将其除以原始图像,我们有效地去除了图像中的所有粗略阴影效果。除法的结果是,背景颜色变为白色,而文本的细线仍然清晰,尽管稍微“更细”。如您所见,它比仅仅对其进行归一化要清晰得多,尽管一些抗锯齿也被去除了。可以对除数图像进行一些额外的调整,但它非常接近预期结果。使用更小的模糊可以产生一种生成艺术轮廓图像的替代方法,如给轮廓图像着色中所示。此运算符可以与背景渐变生成器(例如稀疏颜色渐变)结合使用,以生成比简单模糊整个图像更好的背景“除数”图像。
除运算符实际上类似于“
颜色闪避
”合成方法,但除数图像被取反,并用作源图像。这是 Photoshop 中通常使用的合成,但您可能需要交换和取反图像。参见“颜色闪避
”以了解等效性。在 IM v6.6.8-5 之前,只提供了原始的“除 ”方法(等效于更新的“除_Dst ”)。 |
加 ( ) (将颜色加在一起以形成混合)
将叠加的颜色添加到背景中。本质上是使两个图像均匀地混合在一起。其公式自然为:Src + Dest
但是请注意,如果添加的颜色超过颜色限制,则颜色将被正常颜色范围限制剪裁。这就是为什么结果渐变图像中的一半图像为纯白色,因为这些值在其最大值处被剪裁。建议注意,以确保结果图像没有被剪裁,如果不想剪裁的话。该运算符具有许多主要用途。将包含单独通道颜色的图像合并在一起,但只有单个通道具有颜色。例如...
magick -size 60x60 xc:none -fill red \ -draw 'circle 30,21 30,3' compose_R.png magick -size 60x60 xc:none -fill lime \ -draw 'circle 39,39 36,57' compose_G.png magick -size 60x60 xc:none -fill blue \ -draw 'circle 21,39 24,57' compose_B.png magick composite -compose plus compose_R.png compose_G.png compose_plus_RG.png magick composite -compose plus compose_R.png compose_B.png compose_plus_RB.png magick composite -compose plus compose_G.png compose_B.png compose_plus_GB.png magick composite -compose plus compose_R.png compose_plus_GB.png \ compose_plus_RGB.png |
由于 IM 符合 SVG 标准,“绿色”不是真正的绿色(如 X11 颜色名称中的绿色),而是一种深绿色或半亮绿色。真正的 RGB 绿色可以使用颜色“lime ”来指定,如我们在上面的示例中所做的那样。 |
加
”有时用于将白色文本添加到图像中。这不是正确的使用方法,可能会导致一些抗锯齿不一致。更好的方法是使用“屏幕
”合成方法。这使用乘法而不是加法方法来增加亮度。线性闪避合成方法等效于“加
”,但使用更常见的“覆盖
”alpha 混合。 加和加混合
使“加
”更重要的是,它几乎是唯一实现了不同于“覆盖
”混合的混合函数的数学运算符。它不仅“添加”颜色,还“添加”alpha 通道值,并且默认情况下几乎是唯一执行此操作的运算符。这很重要,因为它允许正确地合并互补的蒙版图像。例如,参见Dst 内和外图像的合并。它还允许您使用透明度生成两个图像的加权平均值或混合。如果不是“加
”这种特殊的混合方法,这些特殊的透明度处理技术通常就不可能实现。从 IM v6.6.1-6 版本开始,所有数学合成方法都增加了在 Alpha 通道上使用数学运算符的功能,只需从 "
-channel
" 设置中删除默认的 "Sync
" 标志即可(只需指定要应用它的特定通道)。请参见下面的使用图像合成进行图像通道数学运算。这意味着 "Plus
" 运算符是唯一不受此功能影响的数学合成方法 运算符,因为它默认情况下已应用。Minus、Minus_Dst、Minus_Src ( )
结果是将一个图像从另一个图像中减去。哪个图像从另一个图像中减去取决于是否应用了 "Minus_Src
" 或 "Minus_Dst
"。具体来说,"Minus_Dst
" 表示 "减去目标图像",或者在 "magick composite
" 命令中应用时...... "Minus_Dst
" 的公式是 Src - Dest
,而 "Minus_Src
" 的公式是 Dest - Src
由于图像在图像合成和 "magick composite
" 命令中通常定义的顺序,原来的方法 "Minus
" 意味着......{Source} Minus {background}
Minus
" 是 "Minus_Dst
" 的同义词,表示 "减去目标图像"。它也是用于定义显示的梯度图的运算符。例如,从上面 "Plus
" 操作的最终结果中减去一个圆圈。
|
Plus
"。请参见下面的数学合成和 Alpha 混合。此处理可以通过使用特殊的 "Sync
" 通道标志来修改。请参见下面的图像通道数学运算,了解详细信息。 "Linear Burn
" 合成方法也可以用于颜色减法,但它通过用户对要减去的图像进行否定来实现。有关更多详细信息,请参见线性叠加合成方法。在 IM v6.6.8-5 版本之前,只提供了原来的 "Minus " 方法(等效于新的 "Minus_Dst ")。 |
ModulusAdd
"ModulusAdd
" 与 "Plus
" 很相似,只是当结果超过白色时,它会包裹(模运算)回黑色。例如,如果我们添加两个灰度渐变,最亮的颜色将包裹起来形成第二个渐变。
|
|
|
gray50
" 作为背景来有效地将渐变向前滚动半个模周期。 ModulusSubtract
"ModulusSubtract
" 运算符与 "Minus
" 相同,只是它是模运算减法。从 "灰色" 中减去 "白色" 将导致原来的 "灰色",而不是黑色,因为值会环绕回来。模运算减法的一个副作用是,一些部分可能会变成白色而不是黑色,以看似不可控的方式。
|
ModulusAdd
" 与 反转图像 一起使用会产生相同的结果。 Difference(图像比较,和选择性反转)
生成的图像是在颜色值方面的绝对差值。它的公式是:abs(Src - Dest)
"黑色
" 和 "白色
" 的差值将产生一个最大的白色结果,而任何相同的颜色将产生黑色。基本上是图像比较的简单形式。这种合成方法最常见的用途是比较两个大小相同的图像,看看它们是如何不同的,甚至产生这些差异的百分比。此运算符通常用于生成 比较差异图像。此运算符也可以用于选择性地反转图像。覆盖黑色不会对背景有任何影响,而覆盖白色则会否定该位置图像中的颜色。换句话说,这个运算符(以及下一个运算符)提供了图像映射的 反转 运算符。例如,让我们反转一半的玫瑰图像。
|
|
Exclusion(图像差值,排除灰色)
它的公式是:Src + Dest - 2*Src*Dest
这是一种平均差值。白色与白色将产生黑色(无差异),黑色与黑色也是如此。但是,灰色与灰色将产生灰色结果。白色和黑色自然仍然产生白色(最大差异)。从另一个角度来看,这就像亮图像区域会导致相应另一层的反转。非常暗的区域不会改变任何东西。这样一来,Exclusion 方法就与 "Difference
" 相同(见上文)。此运算符的一个用途是乘以 "偏差渐变",例如用于 位移图。这些是渐变,其中 50% 的灰色值被认为是 "零",更暗的颜色表示 "负值",更亮的颜色表示 "正值",值范围为 -1 到 +1。有关详细信息,请参见 乘以偏差渐变。Joe Fry 提交的这种合成方法的另一个用途是将多个差异图像合并在一起的方法。最终图像显示所有图像的变化,而不仅仅是两个图像之间的变化。也就是说,给定图像 A、B 和 C,首先生成 A、B 和 B、C 的差异图像,然后对这些结果使用排除法,这样你就可以得到一个显示所有三个图像变化的图像。这种方法也与 Xor 合成混合运算符处理 Alpha 透明度值的机制密切相关。 Lighten 和 Darken(选择最大/最小值)
比较源图像和目标图像的颜色值,并取相应的较亮或较暗的值。Lighten 的公式是: | 如果 Src > Dest |
那么 Src |
否则 Dest |
"Lighten
" 的一个用途是合成原始图像的模糊版本,以便原始图像中的 "高光" 出现柔和的光晕。
这些运算符通过比较和选择各个 RGB 通道值来工作,因此这会导致一些颜色失真,尤其是在处理图像的主色时。例如,这里我创建了一个红色和蓝色渐变图像,然后使用 lighten 将它们合成在一起。
magick -size 100x100 gradient:red-black -rotate 90 red_gradient.png magick -size 100x100 gradient:blue-black blue_gradient.png magick red_gradient.png blue_gradient.png \ -compose Lighten -composite lighten_by_value.png |
Lighten
" 合成通过颜色值来工作,因此结果只是红色和蓝色图像的简单合并,产生一个红色-蓝色渐变图像。也就是说,以上操作等同于简单的 通道复制合成。防止颜色失真的一种方法是将运算符限制为仅使用 HSL 色彩空间 调整图像的 "亮度" 通道。尽管这并不总是产生良好的结果。注意,"Gimp "、"Photoshop "、"PhotoLine "、"Paint Shop Pro " 都直接比较通道,就像 IM 一样。" Photo-Paint " 通过颜色强度比较图像,并使用该结果来决定从哪个图像中选择颜色,从而保留颜色完整性。请参见下面的 Lighten-Intensity 方法。另一方面," Picture Publisher " 和 "PhotoImpact " 使用颜色亮度(由 HSL 色彩空间定义)进行比较。有关各种色彩空间中灰度差异的比较,请参见示例 使用色彩空间进行灰度化。 |
Lighten-Intensity 和 Darken-Intensity(通过强度选择颜色)
从 IM v6.6.9-5 版本开始,添加了 "Lighten_Intensity
" 和 "Darken_Intensity
" 变体。这将比较两个图像中像素的强度,然后根据该结果选择像素值。这意味着不会向图像添加任何新颜色,尽管新图像将是来自两个图像的颜色混合。另外,图像顺序无关紧要,只是大小和元数据来自目标图像。例如,这里取包含红色和蓝色渐变的图像的较亮部分。
magick red_gradient.png blue_gradient.png \ -compose Lighten_Intensity -composite lighten_intensity.png |
这种合成方法没有由 SVG 合成指南(2009) 定义,该指南被我们迄今为止看到的所有先前合成方法使用。因此,关于 Alpha 通道如何影响像素比较没有真正的定义。 |
关于 Alpha,该方法有两种操作模式。使用 "
-channel
" 设置的特殊 "Sync
" 标志启用(默认情况下),比较将基于颜色的强度,并由 Alpha(透明度)通道加权。这意味着 "半透明白色" 的加权强度与 "不透明的中灰色" 颜色大致相同。这意味着在所有其他条件相同的情况下,"Lighten_Intensity
" 将创建一个形状图像的 "并集",而 "Darken_Intensity
" 将创建一个(至少是非黑色)形状图像的 "交集"。这不是理想的,并且可能会发生变化,但它比没有 Alpha 输入要好。
Sync
" 通道标志(请参见下面的 使用 "Sync" 标志),则将使用第二种操作模式。例如,使用 "-channel All
"。然后,像素选择将纯粹基于颜色强度,而不会受到 Alpha 加权的影响。但是,Alpha 通道值将与实际选择的像素数据一起复制。对于没有透明度的图像,无论模式如何,结果都将相同。这种第二种模式还允许您使用更受限制的 "-channel
" 来定义可以从源图像复制到目标图像中的通道(如果选中)。然而,选择仍然纯粹基于非加权的颜色强度。这意味着您可以更轻松地基于两个图像中颜色的强度创建选择的 "形状蒙版"。您根据颜色强度比较图像,但只关心结果中的 Alpha 通道值。要制作 "蒙版",您可以使用 Alpha 透明 使一个图像完全透明(但仍然有颜色),而另一个图像完全不透明(默认值)。最后,您可以使用 Alpha 提取 来获得哪个图像在该像素位置具有较亮颜色的蒙版。
|
在 IM v6.6.9-5 中添加。但尚未找到该方法的正式定义。因此,当前实现被归类为**高度实验性**,可能会根据用户建议而改变。然而,其基本思想是合理的。 |
较早版本 IM 的强度替代方案
如果您的 ImageMagick 版本不支持“Lighten_Intensity
”方法,您可以通过对两个图像的灰度副本使用“Lighten
”来重新创建一个纯颜色版本,并将结果与灰度副本进行比较,从而创建一个选择蒙版以应用于原始图像。这并不容易,以下是一种解决方案...Darken_Intensity
”版本,请将“-delete 1
”替换为“-delete 0
”,或者将“-compose Lighten
”替换为“-compose Darken
”。两者都可以。集合论等效操作
上面许多数学方法也用于对形状执行集合论或布尔运算。“Lighten
”合成方法可用于查找两个(或更多)组(集合)或像素的“并集”(布尔“或”)。
magick -size 64x64 xc: -draw 'circle 22,32 5,32' -negate circle_left.gif magick -size 64x64 xc: -draw 'circle 41,32 58,32' -negate circle_right.gif magick circle_left.gif circle_right.gif \ -compose Lighten -composite circle_union.gif |
Darken
”合成方法生成像素的“交集”(布尔“与”)。“Difference
”合成方法生成两个集合的“异或”(布尔“异或”)。也可以使用“Exclusion
”方法来实现此目的,但对灰度(非布尔)值的处理方式不同。然而,它是用于“XOR
”Duff-Porter Alpha 混合的方法。最后,“Minus
”可用于生成两个像素集的“相对补集”。请注意,当应用上述任何“集”或“布尔”合成方法时,可能需要使用“-clamp
”来处理 ImageMagick 的 HDRI 版本,以防止生成超出范围的值。数学合成和 Alpha 混合
您可以使用上述数学合成方法对图像执行数学运算。但是,这有一个主要的注意事项。对于包含透明度的图像,它可能无法按您的预期工作。默认情况下,几乎所有上述数学合成都遵循 SVG 规范定义的约定。 SVG 合成指南 (2009)。这意味着,如果您尝试对具有 alpha 通道(即某种形式的透明度)的图像使用数学合成,您可能无法获得真正的数学合成,而是获得“混合”形式的合成。例如,这里我创建了一些透明度的渐变图像,然后将它们“Multiply
”在一起。
magick -size 64x64 xc:none -draw 'rectangle 20,0 43,63' \ gradient: -compose In -composite alpha_src.png magick alpha_src.png -transverse alpha_dst.png magick alpha_dst.png alpha_src.png \ -compose Multiply -composite alpha_result.png |
Source |
目标 |
结果 |
Plus Composition 是唯一一个不进行“超过 alpha 混合”的 Mathematical Compose Method。相反,根据 SVG 规范,它分别添加每个通道。但是,颜色通道在添加之前仍然根据 alpha 值进行加权,只是 alpha 值的处理方式(混合)不同。 这对于提供掩盖形状的正确“相加”至关重要,如 DstOut Composition 中所示。 |
使用图像合成进行图像通道数学运算
如果您正在使用的图像 Mathematical Compose Methods 只是完全不透明的灰度图像,那么您可以直接在这些图像上使用上述方法,没有任何问题。但是,默认情况下,合成方法将应用于所有颜色通道,并进行 alpha 混合,正如您在上面看到的。这使得将它们应用于特定通道(例如 alpha 通道)变得困难。例如,这里我“Multiply
”了两个包含透明渐变的黑色图像。使用默认的“-channel
”设置。
magick -size 64x64 gradient:black-none alpha_grad_src.png magick alpha_grad_src.png -transverse alpha_grad_dst.png magick alpha_grad_dst.png alpha_grad_src.png \ -compose Multiply -composite alpha_grad_result.png |
Source |
目标 |
结果 |
Black
”与“Black
”相乘为“Black
”,因此在此示例中颜色不会改变。只有结果透明度会修改。但是,结果肯定不是图像 alpha 通道值的乘积,因为根据 SVG 定义,半透明度使用“over”方法进行混合。这在数学上等效于 alpha 通道的“Screen
”合成,而不是乘法。同步通道标志和数学合成
从 IM v6.6.1-6 开始,“Mathematical Compose Methods
”被修改为遵守“-channel
”设置的“Sync
”标志。该标志实际上意味着“同步颜色和 alpha 通道操作”。默认的“-channel
”设置为“RGBK,Sync
”。因此,默认情况下,颜色和 Alpha 通道将根据 SVN 规范以“同步”的方式进行适当处理。但是,通过删除“Sync
”标志,“Mathematical Compose Methods
”将成为“通道运算符”,分别将数学函数应用于每个通道。
|
所有这些只适用于 Mathematical Compose Methods(如上所述)以及特殊的“
Mathematics
”合成方法(见下文)。它不适用于其他合成方法,例如 Lighting Composition Methods(见下文)。至少目前还没有。“Sync
”标志也会影响 Lighten/Darken by Intensity Composition Method(不是 SVG 定义的合成方法)处理 alpha 通道的方式(如上所述)。有关使用图像数学运算的更多信息,请参阅 Mathematics on Gradients。更具体地说,这些示例研究了使用数学合成来生成偏差渐变图像,这更复杂一些。灯光合成方法-- 光、闪避、加深
这些方法以非常复杂的方式修改图像的颜色,通常用于调整图像的阴影或强度,使某些区域更亮,而其他区域更暗。- 灯光合成方法分为三个相关的运算符子类别。
- “加深”,通常使图像变暗。
- “闪避”,通常使图像变亮。
- “光”,根据其中一个图像的暗度和亮度使图像同时变暗和变亮。
Multiply
”(使颜色变暗)通常被认为是纯“加深”合成操作,而“Screen
”(使颜色变亮)是“闪避”合成运算符。通常,其中一个图像将包含颜色图案或照片,而另一个图像将是灰度图像,用于适当的使图像变亮或变暗。哪个图像应该是颜色,哪个应该是灰度,这值得商榷,取决于该方法是如何实现的。在这方面没有标准,因此建议谨慎操作和进行试验。由于这些运算符缺乏标准,许多用户不理解或误用这些运算符。我还没有找到任何关于正确使用这些合成方法的指南,实际上是不存在的,所以我不得不尽力使用下面的例子。 覆盖(将颜色添加到灰度对象)
这种合成方法非常不寻常,因为它被设计为同时“Multiply
”(变暗)和“Screen
”(变亮)图像。将哪种方法应用于特定像素由目标图像的值选择,目标图像可以被视为“灯光蒙版”。因此,目标通常是灰度图像,颜色将被添加到其中。其公式为: | 如果 Dest <= 0.5 |
那么 | 2*Src*Dest |
否则 | 1-2*(1-Src)*(1-Dest) |
magick -size 64x64 gradient:yellow-blue gradient_yell-blue.jpg magick -size 64x64 gradient: -rotate 90 gradient_grey.jpg magick gradient_grey.jpg gradient_yell-blue.jpg \ -compose Overlay -composite compose_overlay_gradients.jpg |
目标 |
覆盖 |
结果 |
Multiply
”或“Screen
”不同,它不是可结合的。
magick gradient_yell-blue.jpg gradient_grey.jpg \ -compose Overlay -composite compose_overlay_gradients2.jpg |
目标 |
覆盖 |
结果 |
-shade
”运算符的输出中。但是,您需要非常小心地从该运算符中生成完美的中间调灰色,才能在没有高光的区域获得正确的着色。有关详细信息,请参阅 Shade Overlay Highlights。例如,给定一个圆形,我们可以对其进行阴影处理以产生 3 维效果,然后用原始图像对其结果进行着色以恢复原始颜色。
magick -size 64x64 xc:dodgerblue \ -draw 'fill skyblue circle 32,32 7,27' circle_blue.jpg magick circle_blue.jpg -shade 120x30 -auto-level circle_shaded.jpg magick circle_shaded.jpg circle_blue.jpg \ -compose Overlay -composite circle_shaded_tinted.jpg |
目标 |
覆盖 |
结果 |
Overlay
”方法的更实际的示例,请参阅 Background Generator Examples 页面上的“levels_3d”图像。这种合成方法最大的问题是,任何图像中的透明度都不会被保留。也就是说,在任何图像中可见的内容都会在结果中可见。通常,该运算符用于不包含透明度的图像,这意味着您可能需要做一些额外的步骤来恢复目标或背景图像的透明度。一种保留透明度的简单方法是简单地 关闭目标图像的 Alpha 通道,从而使其不可访问。当合成完成后,您可以 再次打开它。这在 Shaded Shape Images 中有一个示例。另一种方法是保存一个“蒙版”,或原始图像的副本,然后使用该蒙版或图像来恢复透明度。这在 Overlay Color Tinting 中有一些示例。或者在更复杂的示例 Better 3-D Logo Generation 中。直到 IM 版本 6.1.6,“叠加”合成方法一直存在问题,它只会产生纯黑色或白色结果(很可能你只会得到纯黑色结果)。因此,大多数 IM 用户很难理解这个运算符。现在这个问题已经解决,用户现在可以很好地使用这个方法了。 |
强光(为图像添加纹理或高光/阴影)
这与“叠加
”相同,只是源图像和目标图像交换了。如果你比较这两个运算符的渐变图像,你会发现渐变是沿对角线转置的,这表明源和目标输入被交换了。其公式为: | 如果 Src <= 0.5 |
那么 | 2*Src*Dest |
否则 | 1-2*(1-Src)*(1-Dest) |
叠加
”可以为灰度阴影物体添加颜色,但“强光
”可以为图像添加灰度照明效果。你使用哪种方法取决于你对添加图像照明效果的思考方式。重要的区别是哪张图像是“目标”图像,以便保留图像元数据,或者甚至暂时 禁用 Alpha 通道 以在操作期间保留它。例如,这里我使用一个与原始图像相同大小的纯灰色图像的模糊“-raise
”操作来生成“照明效果”。然后使用“强光
”将这些照明效果添加到图像中。
magick rose: -fill gray50 -colorize 100% \ -raise 4 -normalize -blur 0x4 lighting_effect.png magick rose: lighting_effect.png \ -compose hardlight -composite compose_hardlight.png |
目标 |
覆盖 |
结果 |
|
强光
”的缺点。要解决这个问题,你可能需要降低叠加纹理的对比度。
|
柔光
”,可能也会更直接地产生更好的结果。有关更好的示例,请参阅 叠加纹理,位于 照片菜谱 中。在 IM 讨论论坛 上提供了使用“强光
”阴影的现实生活示例,该示例演示了如何从平面源图像生成 3D DVD 封面。请记住,“叠加
”和“强光
”阴影本质上是相同的合成方法。唯一的区别是图像顺序。 柔光(图像的柔和高光)
“柔光
”合成方法也会为现有的彩色图像添加高光和阴影。但是,目标图像的颜色会发生改变,以产生更柔和的对比度和更平滑的照明效果渐变。如果你仔细观察“灰度图图像”(见右),你会发现没有明显的间断,虽然实际上有两个间断。(另请参阅下一个“顶光
”。它与“叠加
”合成更密切相关,而不是与“强光
”相关,因此目标通常是灰度照明遮罩。这是否是有意的尚不清楚,但它确实使它与“强光
”不同,这意味着你最好将主图像合成到阴影图像上,而不是反过来。:-(警告:这种照明效果更像是“叠加 ”,而不是“强光 ”。但是,哪个应该包含灰度照明图像尚不清楚。使用源图像可以产生全黑和全白的结果,而使用目标图像则不能产生这些极端情况。如果有人有确定的参考,请告诉我。 |
柔光
”纹理映射。
|
granite:
”图像,颜色变化也比“强光
”甚至“叠加
”更柔和、更不强烈。但是,你也不会在生成的图像中添加任何纯黑色阴影或纯白色高光。基本上,“柔光
”具有更柔和的纹理效果,它保留了源图像的原始颜色。这里我展示了使用纯黑色、白色和完美灰色颜色叠加所产生的颜色变化。
|
|
强光
”执行此操作,图像的侧面将是纯黑色和纯白色,而不是只是 50% 的变暗或变亮。在 IM v6.5.4-3 之前,“柔光 ”没有按预期工作,对任何非灰色阴影图像叠加产生增亮效果。事实上,我确认它是根据官方 2004 SVG 规范 正确实现的。不幸的是,错误的是规范,而不是实现。它在 2009 年 3 月的 SVG 规范 中得到修复。因此,对于 IM v6.5.4-3 及更高版本,这个运算符现在按你期望的灯光阴影运算符的工作方式工作。 |
顶光(柔和光的更平滑变体)
虽然“柔光
”比“强光
”或“叠加
”更平滑,但它实际上仍然基于两个单独的函数组合在一起。“顶光
”方法产生的结果与“柔光
”几乎相同,但它使用单个平滑函数,没有任何间断,甚至没有“柔光
”使用的两个较小的间断。因此,它实际上更简单、更快。它的公式是: 2*Src*Dest + Src2*(1 - 2*Dest)
有关详细信息,请参阅 Pegtop 柔光替代 页面。警告:这种照明效果更像是“叠加 ”,而不是“强光 ”。 |
“顶光 ”合成方法已添加到 IM 版本 6.5.4-3 中。 |
线性光(一种非常简单但强烈的阴影方案)
另一种对叠加阴影图像非常敏感的图像阴影方法。它具有更大的纯黑和纯白极限区域。它的公式是:2*Src + Dest - 1
虽然它是一个连续函数,但它实际上可以被认为是“线性闪避
”(相当于“加
”合成)和“线性加深
”(这是一种有时用于减去图像的偏移“加”)的组合。在 IM v6.5.4-3 之前,“线性光 ”被证明是错误实现的。 |
鲜明光(线性光的变体)
“鲜明光
”方法与 Photoshop 7 中实现的方法相同,基本上是对“线性光
”方法的细微改进。它所做的是避免对极端情况进行阴影处理,以便使图像中的强主要颜色更加“鲜明”。其公式为: | 如果 Src <= 0.5 |
那么 | 1-(1-Dest)/(2*Src) |
否则 | Dest/(2*(1-Src)) |
颜色加深
”和“颜色闪避
”混合,用于极端情况,但对于中间色调则使用“线性光
”。“鲜明光 ”合成方法已添加到 IM 版本 6.5.4-3 中。 |
点光
“点光
”函数旨在更好地保留目标图像的中间色调,将其阴影限制在更亮和更暗的叠加阴影。据称,这模拟了来自微型针孔光源的强烈而锐利的照明变化,而不是更漫射的“柔和”光源。其公式为: | 如果 | Dest < 2*Src-1 |
那么 | 2*Src - 1 |
否则 | Dest > 2*Src |
那么 | 目标 |
|
否则 | 2*Src |
“点光 ”合成方法已添加到 IM 版本 6.5.4-3 中。 |
线性闪避(Photoshop 的“加”合成)
如果你将“线性闪避
”的渐变图像(右)与“加
”的渐变图像进行比较,你会发现对于两个不透明图像,它们具有完全相同的效果。当然,它的公式是: Src + Dest
也就是说,对于没有透明度的图像,这两个命令与图像“A
”和“B
”产生相同的合成图像“R
”...
magick A B -compose Plus -composite R magick A B -compose LinearDodge -composite R |
“线性闪避 ”合成方法已添加到 IM 版本 6.5.4-3 中。 |
线性加深(Photoshop 的“减”方法)
“线性加深
”合成方法是一种“加减一”合成,它产生的结果与你对“线性闪避
”或“加
”合成方法的所有输入和输出图像取反相同。它的公式是:Src + Dest - 1
在 Photoshop 中,这不仅被称为“线性加深
”,还被称为“减
”。也就是说,因为如果你对一个输入图像(如源图像)取反,该图像将从另一个图像中减去。例如,以下是当你对源图像取反时生成的数学运算...(1-Src) + Dest - 1 ==> Dest - Src
A
”并减去图像“B
”产生相同的合成图像“R
”...
magick A B -compose minus_src -composite R magick B A -compose minus_dst -composite R magick A \( B -negate \) -compose linear_burn -composite R magick B -negate A -compose linear_burn -composite R |
线性加深
”将从另一个图像中减去的图像。图像是否为源图像或目标图像并不重要。在某种程度上,这使得这种合成方法更加通用。例如,这里我从左侧的圆形图像中减去右侧的圆形图像(我取反了它)。
magick circle_left.gif \( circle_right.gif -negate \) \ -compose LinearBurn -composite circle_subtract.gif |
线性加深
”不能直接应用于图像的 Alpha 通道,而更 数学合成方法 减 可以。“线性加深 ”合成方法已添加到 IM 版本 6.5.4-3 中。 |
颜色加深(Photoshop 除法)
这种合成方法使用源叠加图像作为蒙版,它在一定程度上保护了背景图像免受长时间的“光照”。暴露在较浅蒙版下的部分会变亮(或躲避),而黑色区域则不会发生变化。您可以将其想象成将一个物体长时间放在照片上面,导致暴露在光线下的部分随着时间的推移而慢慢变白,而被遮挡的部分则保持原样。纯黑色叠加不会改变图像,而纯白色叠加将使所有背景颜色变为白色,除了那些原本就是纯黑色的颜色。但是,与“Screen
”(反向相乘)或“Linear_Dodge
”(加法)躲避合成方法不同,纯黑色或全白色目标图像不会受到光照蒙版的影响。换句话说,只有包含灰色和非纯色的区域才会受到影响。其公式为:Dest / (1-Src)
此处需要示例和实际应用事实上,“ColorDodge
”和两个“Divide
”运算符可以产生相同的结果。“ColorDodge
”但是,它需要将用作“除数”的图像取反并用作运算符的“源”图像。例如,所有这些对图像“N
”(分子)除以“D
”(分母)的操作都会产生相同的最终图像“R
”... 假设所有图像的大小都相同。
magick N \( D -negate \) -compose ColorDodge -composite R magick N D -compose DivideSrc -composite R magick D N -compose DivideDst -composite R |
Divide
”,了解如何将图像除法用于去除背景渐变。 Color_Burn
这是“Color_Dodge
”的反向,相当于反转所有输入和输出图像。结果是背景图像被深色蒙版图像变暗,而白色则不会变暗。但是,与“Multiply
”或“Linear_Burn
”燃烧合成方法不同,纯黑色或全白色目标图像不会受到光照蒙版的影响。换句话说,只有包含灰色和非纯色的区域才会受到影响。其公式为:1 - ( (1-Dest) / Src)
此处需要示例和实际应用此命令等同于之前的一组公式来实现图像除法。注意命令中的最终否定。
magick N -negate D -compose ColorBurn -composite -negate R |
Color_Burn
”的一种用途是将深色渐变背景清理为纯黑色。就像“Color_Dodge
”可以将背景除以白色一样。在 IM v6.5.4-3 之前,“Color_Burn ”被证明是实现不正确的。 |
通道复制方法
这些图像合成方法旨在将图像通道信息从一个图像传输到另一个图像。但是,它对从其复制“通道”的图像进行了一些假设。我建议您阅读 图像颜色空间 和 颜色通道运算符 了解 IM 如何在内存中表示图像颜色通道,然后再使用它们。最有用的通道复制合成方法是“Copy_Opacity
”(见下文)。它是使用单独的灰度蒙版图像完全替换(或添加)现有图像的 alpha 通道的最简单方法。 Copy_Opacity(从灰度蒙版设置透明度)
“Copy_Opacity
”运算符的最初目的是将源图像的透明度通道复制到目标图像中,以设置该图像的透明部分。这通常使用 Duff-Porter 运算符来完成,这些运算符专门设计用于合成具有 alpha 透明度的图像。例如,如果目标是完全不透明的,这在该运算符的典型使用中很常见,那么“Dst_In
”甚至“Dst_ATop
”运算符都将实现相同的结果。那么,当存在替代方案时,“Copy_Opacity
”运算符为何如此重要?答案在于该运算符如何处理特殊情况。当叠加(源)图像没有 alpha 通道时,该运算符将将其视为简单的灰度图像蒙版。也就是说,它将用给定的灰度图像替换图像的任何现有 alpha 通道。总之,灰度图像中为黑色的任何部分都被认为是完全透明的,白色是完全不透明的。这非常重要,而且非常常用,我将把它作为经验法则…
使用该运算符的图像不应包含任何 alpha 通道。
您可以通过在使用“Copy_Opacity
”合成设置进行合成之前,在两个输入图像上关闭 Alpha 通道来确保图像不包含任何 alpha 通道。例如,制作一个灰度月亮图像(很容易绘制),然后将其用作蓝色 等离子体渐变 的蒙版,以产生一个漂亮的有斑点的蓝色月亮。
|
|
Dst_In
”,从您的目标中减去源叠加的透明区域(在这种情况下,两个图像都需要启用和使用 alpha 通道。该运算符在 使用蒙版图像与字体 和 编辑图像蒙版 中有更详细的解释。它也用在这些页面上的许多其他示例中。 Copy_Red、Copy_Green、Copy_Blue
将源图像的给定颜色通道复制到目标图像中。由于灰度 RGB 图像在所有三个颜色通道中具有相同的数据,因此可以认为这些方法是将灰度通道图像复制以替换目标图像中指定的通道。就像“Copy_Opacity
”(见上文)可以将图像的“alpha 通道”替换为灰度图像一样。这些通道复制方法在今天很少使用,这要归功于使用各种 颜色通道运算符 通过灰度通道图像来分离和重新组合颜色通道。请注意,当合并各种灰度渐变图案时,可以使用这些运算符生成非常有趣的彩色图像。有关一些示例,请查看 原始合成运算符表 中的颜色渐变组合。 Copy_Cyan、Copy_Magenta、Copy_Yellow
这些是上一节中相同方法的同义词。基本上,由于 RGB 图像中的“Red
”通道也用作 CYMK 图像中的“Cyan
”通道。对于“Green
”和“Magenta
”通道,以及“Blue
”和“Yellow
”通道也是如此。因此,复制“Cyan
”通道与复制“Red
”通道相同。图像数据代表的通道类型取决于内存中图像的当前 颜色空间。 Copy_Black
这也只是将“Black
”通道从源复制到目标,如果它存在。但是,该通道仅存在于 CMYK 图像中。如果“Black”通道不存在,则不会执行任何操作,这可能是一个错误。它可能应该做的是将灰度“Black”通道图像复制到目标图像的黑色通道(假设它存在)。 Hue(将 RGB 图像的色相复制到目标)
该运算符将源图像的色相 H 复制以替换目标图像的色相,同时保持背景的饱和度 S 和亮度 L(或者说是亮度 Y 吗?)不变。假设两个图像都处于 RGB 颜色空间图像中。我还没有在非 RGB 颜色空间图像中测试过它。Saturate(将 RGB 图像的饱和度复制到目标)
将饱和度 S 从源复制到目标(假设图像为 RGB 颜色空间图像),保持颜色色相 H 和亮度 L(或者说是亮度 Y 吗?)不变。假设两个图像都处于 RGB 颜色空间图像中。我还没有在非 RGB 颜色空间图像中测试过它。Luminize(将 RGB 图像的亮度复制到目标)
将亮度 L(或者说是亮度 Y 吗?)从源复制到目标,保持颜色色相 H 和饱和度 S 不变。假设两个图像都使用 RGB 颜色空间存储。我还没有在非 RGB 颜色空间图像中测试过它。Colorize(将颜色色相和饱和度复制到目标)
将色相 H 和饱和度 S 从源复制到目标,保持颜色亮度 L(或者说是亮度 Y 吗?)不变。假设两个图像都使用 RGB 颜色空间存储。我还没有在非 RGB 颜色空间图像中测试过它。将一个图像溶解到另一个图像上
“-dissolve
”运算符的作用是提供受控的“Over
”合成方法。它根据给定的百分比调整叠加图像的透明度,然后再将叠加图像叠加到背景之上。-
magick composite -dissolve {percent} overlay bgnd result
magick composite -dissolve {src_percent}x{dst_percent} overlay bgnd result
magick bgnd overlay -compose dissolve \
-define compose:args={src_percent},{dst_percent} \
-composite result
Over
”合成方法)叠加到背景之上。此外,如果您继续超过 100% 的值(这也是 IM v6 的新功能),它将开始溶解掉背景图像。换句话说,在 0% 到 100% 的范围内,背景图像根本不会溶解(dst_percent 为 100%
),而在 100% 到 200% 的范围内,叠加图像保持原样(src_percent 设置为 100%
),而背景图像会溶解,因此当参数达到 200%
的值时,它会完全消失。以下是一些使用不同溶解参数的结果表格…
|
-dissolve
”将首先在背景上缓慢溶解一个新图像,然后缓慢溶解掉原始背景图像。这非常适合包含透明区域的图像。您还可以控制背景的溶解,因此当一个图像在上面溶解时,您可以安排底部的背景溶解掉。这很好,但并不真正适合图像之间适当的幻灯片风格的溶解。当一个图像叠加时,图像不会均匀地合并,并且交换图像参数(以及相应的溶解参数)会产生不同的结果。
对于 100% 到 200% 的范围,或者第二个百分比参数要起作用,背景图像必须包含一个 alpha 通道。这对默认情况下不包含任何透明度的 JPEG 图像尤其重要。
因此,最好在应用“ |
|
Dissolve
”组合中获得完全不透明图像的唯一时间是,如果其中一个图像(通常是“背景”)没有被溶解(100% 的值),并且保持不透明。这就是为什么默认情况下至少在开始时使用“背景”的 100 值的原因。以下是特定“`-dissolve
”参数的特殊情况...0x0 |
两个图像都被溶解成完全透明。 等效于“` Clear ”合成方法。 |
|
---|---|---|
0 |
仅背景图像保持不变(源图像变为透明)。 等效于“` Dst ”合成方法。 |
|
100 |
叠加图像在背景上的正常叠加。 等效于“` Over ”合成方法。 |
|
200 |
叠加图像在空白画布上(背景变为透明)。 等效于“` Src ”合成方法。 |
-dissolve
”合成方法通常用作 图像水印 的替代方法,特别是对于彩色水印。将两个图像混合在一起
“`-blend
”合成方法提供的是“`-dissolve
”合成方法最初打算提供的功能,它在被用于其他更基本的操作之前被劫持了。而“`-dissolve
”方法将图像叠加在彼此之上,“`-blend
”将图像合并在一起,使两个图像都被平等地处理(只是加在一起),根据给定的百分比参数。因此,您可以通过交换百分比和图像参数来实现相同的结果(最终图像大小除外)。对于“`-dissolve
”方法来说,情况并非如此。换句话说,“`-blend
”是关联的(参数是可交换的),而“`-dissolve
”则不是。
magick composite -blend {percent} overlay bgnd result |
如果只给出一个百分比值,它将被用作叠加的溶解百分比,而背景图像将被溶解相反的量。也就是说,“`-blend 30`”将叠加溶解 30%,背景溶解 70%,然后将两个图像加在一起。因此,它等效于“`-blend 30x70`”。这样做的结果是,两个图像(在叠加区域)的不透明度仍然加起来为 100%。
通过给出两个百分比,您可以精确控制要合并的两个图像的多少。以下是一个包含各种溶解参数的结果表...
|
-blend
”将允许您以相同的方式缓慢地用一个图像替换另一个图像,而不会叠加。如果您将混合的结果叠加在一个黑色画布上(例如您的显示器的尺寸),您可以轻松地制作一个体面的幻灯片程序,其中一个图像缓慢地溶解成另一个图像。您还可以看到,由于图像加在一起(在内部使用“`Plus
”合成运算符),您可以轻松地超载颜色通道最大值,从而产生一些伪像。特别是 100% 的白色将确保其他图像的任何内容都不可见,因为所有颜色通道都已达到其最大值。建议在大多数情况下,您只需要使用单参数版本的混合。
与“`-dissolve ”一样,“`-blend ”需要背景图像包含一个 alpha 通道才能正常工作,以便溶解背景图像。
因此,在应用“` |
-blend
”参数的特殊情况...0x0 |
两个图像都被溶解成完全透明。 等效于“` Clear ”合成方法。 |
|
---|---|---|
0 |
仅背景图像保持不变。 等效于“` Dst ”合成方法。 |
|
100 |
叠加图像在空白画布上。 等效于“` Src ”合成方法。 |
|
100x100 |
仅将两个图像加在一起。 等效于“` Plus ”合成方法。 |
|
50 |
两个图像的平均值。这等效于“`-evaluate-sequence mean ”图像序列运算符,但有两个图像。(另见 图像平均) |
混合与溶解
虽然溶解和混合都会使图像半透明,但“`-dissolve
”使用“`Over
”合成图像,而“`-blend
”使用“`Plus
”合并图像。这可能看起来并不重要,但它可能非常重要,因为它定义了两种合成方法如何处理图像中未叠加的部分,或叠加是透明的区域。例如。
magick dragon_sm.gif star.gif -alpha on \ -compose dissolve -define compose:args=50 \ -gravity South -composite dissolve_50.png magick dragon_sm.gif star.gif -alpha on \ -compose blend -define compose:args=50 \ -gravity South -composite blend_50.png |
溶解 |
混合 |
magick dragon_sm.gif rose: -crop 70x46+0+0 +repage -alpha on \ -compose dissolve -define compose:args=50 \ -gravity South -composite dissolve_50_opaque.png magick dragon_sm.gif rose: -crop 70x46+0+0 +repage -alpha on \ -compose blend -define compose:args=50 \ -gravity South -composite blend_50_opaque.png |
溶解 |
混合 |
使用混合修改单个图像
混合基本上是一个“插值函数”或“加权平均值”,允许您以受控的线性方式组合两个完全不透明的图像。也就是说,源图像的 30% 加上背景的 70%,产生一个新的 100% 不透明的图像。但是,它不仅可以组合两个图像。它还可以用于使特定图像变亮、设置对比度、饱和度、着色甚至锐化。这种混合的使用方式将在 BugBear <[email protected]> 在 WWW 上找到的一份文档中进一步讨论,通过插值和外推进行图像处理,该文档是 Grafica Obscura 上的一个副本(该文档无法从外部资源直接链接)。建议您进一步阅读本文档,了解如何使用此函数。在 IM v6.3.5-10 中,外推功能被添加到“`-blend ”运算符中。 |
magick composite -blend 0 rose: -size 70x46 xc:black -alpha Set blend_dark_0.jpg magick composite -blend 50 rose: -size 70x46 xc:black -alpha Set blend_dark_50.jpg magick composite -blend 100 rose: -size 70x46 xc:black -alpha Set blend_dark_100.jpg magick composite -blend 150 rose: -size 70x46 xc:black -alpha Set blend_dark_150.jpg magick composite -blend 200 rose: -size 70x46 xc:black -alpha Set blend_dark_200.jpg |
0% |
50% |
100% |
150% |
200% |
---|
magick composite -blend 0 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_0.jpg magick composite -blend 50 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_50.jpg magick composite -blend 80 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_80.jpg magick composite -blend 100 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_100.jpg magick composite -blend 120 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_120.jpg magick composite -blend 150 rose: -size 70x46 xc:'#808080' -alpha Set blend_gray_150.jpg |
0% |
50% |
80% |
100% |
120% |
150% |
---|
magick rose: -type grayscale rose_gray.png magick composite -blend 0 rose: rose_gray.png -alpha Set blend_color_0.jpg magick composite -blend 50 rose: rose_gray.png -alpha Set blend_color_50.jpg magick composite -blend 100 rose: rose_gray.png -alpha Set blend_color_100.jpg magick composite -blend 150 rose: rose_gray.png -alpha Set blend_color_150.jpg magick composite -blend 200 rose: rose_gray.png -alpha Set blend_color_200.jpg |
0% |
50% |
100% |
150% |
200% |
---|
magick rose: -blur 0x5 rose_blurred.png magick composite -blend 0 rose: rose_blurred.png -alpha Set blend_blur_0.jpg magick composite -blend 50 rose: rose_blurred.png -alpha Set blend_blur_50.jpg magick composite -blend 100 rose: rose_blurred.png -alpha Set blend_blur_100.jpg magick composite -blend 150 rose: rose_blurred.png -alpha Set blend_blur_150.jpg magick composite -blend 200 rose: rose_blurred.png -alpha Set blend_blur_200.jpg |
0% |
50% |
100% |
150% |
200% |
---|
水印选项 - 合成“`Modulate`”
“`-watermark
”合成选项或“`modulate`”合成方法旨在为了版权目的以 HSB 空间对图像进行消色。
magick composite -watermark {brightness}[x{saturation}] overlay bgnd result \ |
|
-watermark
”参数的特殊情况...0 |
目标图像完全没有改变。 | |
---|---|---|
100 |
在叠加为黑色的地方,目标变为黑色,在叠加为白色的地方,目标变为完全饱和的颜色色调。 | |
0x0 |
蒙版的叠加区域被去饱和为灰度。 | |
100x0 |
灰度叠加简单地“`ATop ”叠加在目标之上。 |
使用合成蒙版来限制合成区域
“`magick composite`”命令和“`-composite
”运算符还将采用第三个蒙版图像,它将限制受“`-compose
”方法影响的区域。例如,给定两个图像和一个蒙版图像,您可以根据该蒙版将源图像的一部分叠加到背景图像上。但是请注意,背景图像仍然定义结果图像的最终大小。蒙版图像被认为是目标图像的一部分,定义了目标的哪些部分可以被 alpha 合成结果修改。也就是说,白色的部分可以被修改,而黑色的部分(以及蒙版图像之外的部分)则保持原样。不幸的是,虽然“`-gravity
”和“`-geometry
”设置允许您重新定位源图像,但蒙版图像不会重新定位,并且与目标图像保持对齐。所以让我们明确一下...
蒙版与原始背景图像对齐。
任何重力/几何设置都不会应用于它。
这意味着,如果我想重新定位蒙版,我需要用适当数量的黑色行和列来扩大蒙版图像。请参见 拼接,添加行和列的像素。例如,以下是一个“`magick`”版本(源图像和背景图像参数被交换),蒙版图像被调整,以便相对于背景图像移动它。任何重力/几何设置都不会应用于它。
|
-composite
”运算符首先指定目标或背景图像。结果就像给蒙版一个“`+10+25`”的偏移量,但源图像和背景图像都没有移动。如果您想将蒙版与源图像对齐,您最好单独对源图像进行蒙版(使用“`Copy_Opacity
”或其他一些技术)。然后,您可以将该结果定位到背景上,而不会出现对齐问题。以下是一个类似的例子,但这一次我使用了一个与背景图像大小相同的渐变蒙版,以便将两个图像混合在一起,产生“`浅滩`”效果。
|
合成蒙版和透明度
您可能会从上面想到,使用三图像合成蒙版非常类似于使用“Copy_Opacity
”设置覆盖图像的透明度,然后将其合成到您的背景上。对于没有任何透明度的图像(例如上面的图像),您是对的。但这并不是全部。首先,蒙版与目标图像相关联,而不是源图像,因此它不会受到偏移或重力影响。另外,与“Copy_Opacity
”不同,蒙版图像被视为纯粹的灰度图像。IM 将忽略蒙版可能具有的任何和所有 Alpha 透明度。因此,您不必担心 在蒙版图像中“关闭 Alpha 通道”。最后,蒙版的工作原理是限制修改的区域,这与仅屏蔽源图像非常不同。对于简单的“Over
”合成,这与蒙版乘以源图像中的任何透明度以限制覆盖的内容相同。因此,对于完全不透明的源图像,您可以将其视为源图像的透明度。例如,正常叠加两个圆圈,然后用蒙版叠加它们以限制更改目标图像的区域。
magick -size 60x60 xc:none -fill red -draw 'circle 35,21 35,3' m_src.png magick -size 60x60 xc:none -fill blue -draw 'circle 21,39 24,57' m_bgnd.png magick -size 60x60 xc: -draw 'polygon 0,59 59,0, 0,0' m_mask.png magick composite m_src.png m_bgnd.png m_over.png magick composite m_src.png m_bgnd.png m_mask.png m_over_masked.png |
Src
”方法来用源图像的内容替换目标图像中的蒙版区域。
|
FUTURE: Using masked composition to overlay an object in front of a backdrop, but behind some foreground object. Also develop an animated example, of something being obscured by foreground objects in the destination.
以上是涉及合成蒙版的主要长期错误,当您涉及具有透明度的源图像或覆盖图像时,或者尝试使用除“Over ”合成方法之外的其他 Alpha 合成时。有关详细信息,请参阅 合成蒙版错误。 |
使用图像图块合成
“-tile ”设置在“magick composite ”中与“magick ”或“magick montage ”中的相同设置非常不同。如果给出它,则意味着源图像应该在背景图像上平铺。例如,这里我们在 Netscape 颜色图图像上平铺一个“彩色星星”...
|
magick composite
”操作的布尔型开/关标志。因此,您不能使用它来平铺背景图像,因为这意味着 IM 不能使用背景图像来设置结果的最终大小。但是,您可以使用“Dst_Over
”将图像平铺在另一个图像下方。
|
magick
”命令中执行平铺的 Alpha 合成。这很可惜,因为它会使 使用内存中的图像进行平铺 比现在容易得多。使用“magick”进行合成平铺的基本技术是 克隆 原始图像,并使用 平铺画布 中给出的方法之一对其进行平铺。例如...
|
Multiply
”替换了标签的“白色背景”。另请参阅 使用图像蒙版,数学合成。特殊合成方法
还有一些出于某种原因添加的特殊用途合成方法。数学(用户定义的数学合成方法)
这种合成方法采用 4 个数值,允许用户定义许多不同的 数学合成方法。四个参数“A
”、“B
”、“C
”和“D
”定义了公式...A*Sc*Dc + B*Sc + C*Dc + D
Sc
”是源图像或覆盖图像,“Dc
”是背景图像或目标图像。所有四个值都必须提供。例如,我们可以使用值“1,0,0,0
”生成等效于“Multiply
”合成方法的内容。
magick gradient_dst.png gradient_src.png \ -compose Mathematics -define compose:args='1,0,0,0' -composite \ mathematics_multiply.png |
Source |
目标 |
结果 |
Screen
:1-(1-Sc)*(1-Dc) => -Sc*Dc + Sc + Dc => -1,1,1,0
|
LinearLight
”,它使用参数“0,2,1,-1
”直接定义...
|
合成方法 | 数学参数 |
---|---|
Multiply |
1,0,0,0 |
屏幕 |
-1,1,1,0 |
Exclusion |
0,1,1,-1 |
线性闪避 |
0,1,1,0 |
线性加深 |
0,1,1,-1 |
线性光 |
0,2,1,-1 |
|
|
“Mathematics ”合成方法已添加到 IM 版本 6.5.4-3 中。目前它只能使用“-compose ”运算符使用。它不可用于“magick composite ”命令,因为它需要参数。 |
Change_Mask(使相似的像素透明)
这是一种不寻常的方法,它只会使目标图像中的特定像素完全透明。也就是说,目标图像中与给定源图像匹配的像素,根据当前 模糊因子 设置。例如,这可用于将透明度重新添加到叠加到复杂(但非常不同)背景上的图像。例如,这正是Jesper Eije提出的问题...简单。请注意,由于 JPEG 图像的颜色通常由于文件格式的无损性质而略有变化,因此需要较小的 模糊因子 设置才能匹配非常相似的颜色。此外,如果图像的更改部分恰好与背景颜色或图案匹配,您将获得结果图像或蒙版中的“孔”,因此在使用非常相似的图像时,始终建议谨慎。通过交换两个图像,使背景图像作为目标图像给出,您可以提取被覆盖图像替换或修改的背景部分。
|
由于这种合成方法只会将像素“清除”为完全透明,因此始终会将 Alpha 通道添加到结果图像中。但是,目标图像的颜色不会像大多数其他 Alpha 合成方法那样被清除。因此,您可以否定 Alpha 通道,以获得未更改的颜色。
|
“ChangeMask ”合成方法已添加到 IM v6.3.4 中,以提供一种 优化 GIF 动画的透明度 的方法。没有其他现有的合成方法提供所需的要求,而无需组合 3 种或更多种合成方法。特别是透明度优化所需的布尔值(或模糊因子阈值)要求。然而,结果本身非常有用,因此它被提供给用户直接使用,因此定义了这种相当复杂的合成方法的名称。 |
图像映射效果方法
还有一些特殊的方法,它们严格来说不是合成方法。它们不是直接在像素级上组合两个图像,而是源图像或覆盖图像是一个特殊的控制图,用于某些更大的效果。虽然它们所代表的方法比较简单,但它们的用途非常复杂,因此它们有自己的示例部分。图像映射效果。这些特殊方法包括... “Blur
”方法提供了一种在像素级上以不同方式模糊图像的方法。它可以生成各种 DIY 图像模糊效果。有关详细信息,请参阅 可变模糊映射。 另一方面,“Displace
”方法提供了一种绝对和相对像素查找位移技术,它不仅可以生成特定的图像失真方法,还可以生成玻璃、透镜和波纹效果。有关详细信息,请参阅 失真和位移映射。