使用 ImageMagick 绘制到 alpha 通道 "cut" 图像中的一个洞
Drawing to alpha channel using ImageMagick to "cut" a hole into an image
我在 macOS 上使用 convert
版本 Version: ImageMagick 7.0.10-24 Q16 x86_64 2020-07-18
。
我正在尝试使用 ImageMagick 创建一个图像,该图像只包含一个彩色圆圈,中间有一个复选标记的透明切口。我可以创建这两个元素,但我无法将它们组合起来。
这会在透明背景上生成一个颜色合适、居中、填充的圆圈,这正是我想要的:
convert -size 44x44 xc:none \
-fill '#e9473e' \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
circle.png
这会产生 a 复选标记:
convert -size 44x44 xc:'#ffffff00' \
-stroke '#ffffffff' \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
tick.png
注意:这只是最新的化身 - 我试过只写入 alpha 通道,从全透明图像开始,否定结果等。我所管理的最接近的确实导致了剪切 -远离,但在边缘周围的抗锯齿区域中有一个无意和不需要的黑色光晕。
我目前的goal/intention是最后一步是:
convert circle.png tick.png -compose multiply -composite final.png
...但我完全希望有人更熟悉 ImageMagick 将以上所有内容组合成一行,从而消除图像大小的重复。
这可能远非最小的解决方案,但当我意识到关键是在最后阶段将着色和遮罩分开时,我想到了这个解决方案:
convert -size 44x44 xc:'#e9473e' \
\( \
-clone 0 \
-fill black \
-colorize 100 \
-fill white \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
-stroke black \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
\) \
-alpha Off \
-compose CopyOpacity \
-composite \
checkmark.png
这是使用 ImageMagick 执行此操作的方法,其概念与您上面的非常好的答案相同,只是稍微简化了一点。
convert \
-size 44x44 \
xc:black \
-fill white \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
-stroke black \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
xc:'#e9473e' \
+swap \
-alpha Off \
-compose copyopacity \
-composite \
-depth 8 \
check.png
首先制作一个黑色正方形,在其上绘制一个白色圆圈,然后在该圆圈上绘制一个黑色复选标记。那将是 alpha 蒙版。
然后它创建一个与蒙版大小相同的红色方块,并通过使用“+swap”切换位置将其移动到蒙版前面。所以现在列表中有两个图像,一个红色方块和一个黑白遮罩。
将 alpha 设置为“off”并将合成方法设置为“copyopacity”,并执行“-composite”操作,IM 将使蒙版为黑色的红色方块透明,蒙版为红色。是白色的。合成操作后,您将在透明背景上留下红色圆圈,中间有一个复选标记形状的“孔”。
我在命令中添加了“-depth 8”,因为我的一些图像查看软件在没有它的情况下渲染透明度并不是很好。
我在 macOS 上使用 convert
版本 Version: ImageMagick 7.0.10-24 Q16 x86_64 2020-07-18
。
我正在尝试使用 ImageMagick 创建一个图像,该图像只包含一个彩色圆圈,中间有一个复选标记的透明切口。我可以创建这两个元素,但我无法将它们组合起来。
这会在透明背景上生成一个颜色合适、居中、填充的圆圈,这正是我想要的:
convert -size 44x44 xc:none \
-fill '#e9473e' \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
circle.png
这会产生 a 复选标记:
convert -size 44x44 xc:'#ffffff00' \
-stroke '#ffffffff' \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
tick.png
注意:这只是最新的化身 - 我试过只写入 alpha 通道,从全透明图像开始,否定结果等。我所管理的最接近的确实导致了剪切 -远离,但在边缘周围的抗锯齿区域中有一个无意和不需要的黑色光晕。
我目前的goal/intention是最后一步是:
convert circle.png tick.png -compose multiply -composite final.png
...但我完全希望有人更熟悉 ImageMagick 将以上所有内容组合成一行,从而消除图像大小的重复。
这可能远非最小的解决方案,但当我意识到关键是在最后阶段将着色和遮罩分开时,我想到了这个解决方案:
convert -size 44x44 xc:'#e9473e' \
\( \
-clone 0 \
-fill black \
-colorize 100 \
-fill white \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
-stroke black \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
\) \
-alpha Off \
-compose CopyOpacity \
-composite \
checkmark.png
这是使用 ImageMagick 执行此操作的方法,其概念与您上面的非常好的答案相同,只是稍微简化了一点。
convert \
-size 44x44 \
xc:black \
-fill white \
-strokewidth 0 \
-draw 'translate 21.5,21.5 circle 0,0 21.5,0' \
-stroke black \
-strokewidth 3 \
-draw 'stroke-linecap round line 13,24 19,30 line 19,30 34,15' \
xc:'#e9473e' \
+swap \
-alpha Off \
-compose copyopacity \
-composite \
-depth 8 \
check.png
首先制作一个黑色正方形,在其上绘制一个白色圆圈,然后在该圆圈上绘制一个黑色复选标记。那将是 alpha 蒙版。
然后它创建一个与蒙版大小相同的红色方块,并通过使用“+swap”切换位置将其移动到蒙版前面。所以现在列表中有两个图像,一个红色方块和一个黑白遮罩。
将 alpha 设置为“off”并将合成方法设置为“copyopacity”,并执行“-composite”操作,IM 将使蒙版为黑色的红色方块透明,蒙版为红色。是白色的。合成操作后,您将在透明背景上留下红色圆圈,中间有一个复选标记形状的“孔”。
我在命令中添加了“-depth 8”,因为我的一些图像查看软件在没有它的情况下渲染透明度并不是很好。