imagemagick - 使用 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 执行此操作的一种方法,与您上面非常好的答案的概念相同,并且稍微简化了一点。
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”,因为我的一些图像查看软件在没有它的情况下渲染透明度并不好。
推荐阅读
- r - 放入模块闪亮时代码不起作用
- php - 当 imap_mail 没有参数时,它如何知道要使用哪个 IMAP 连接?
- python-3.x - 正则表达式,仅从 URL 的最后一段中获取单词
- node.js - Hapi.js 响应中间件
- angular - 使用 Bootstrap 指令时,HttpTestingController expectOne 不起作用
- c# - 监视器输入 ArgumentNullException
- python - 显示已保存选定选项的单选按钮,带有 Python Bootstrap
- python - 如何避免在单击 slack 按钮时以及在 url 请求运行时出现警告符号 slack 没有响应任何用户 ping
- keyboard - 有没有可能从键盘获取字符串并打印出来的方法?
- javascript - 像 SDK 一样的 Facebook 在首次加载时不起作用