首页 > 解决方案 > 使用 ImageMagick 绘制到 alpha 通道以在图像中“切割”一个洞

问题描述

我在 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

这会产生一个复选标记:

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 通道,从全透明图像开始,否定结果等。我管理的最接近的确实导致了剪切,但是有一个边缘周围的抗锯齿区域中出现无意和不需要的黑色光晕。

我目前的目标/意图是最后一步是:

convert circle.png tick.png -compose multiply -composite final.png

...但我完全希望更熟悉 ImageMagick 的人将上述所有内容组合成一条线,从而消除图像大小的重复。

标签: imagemagick

解决方案


这是使用 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”,将 compose 方法设置为“copyopacity”,并进行“-composite”操作,IM 将使红色方块在蒙版为黑色的地方透明,在蒙版为白色的地方保持红色。合成操作后,您会在透明背景上留下红色圆圈,中间有一个复选标记形状的“孔”。

我在命令中添加了“-depth 8”,因为我的一些图像查看软件在没有它的情况下渲染透明度并不好。


推荐阅读