从另一张图片中减去一张图片(裁剪/排除)(ImageMagick)

3
我想做一个简单的操作,但无法找到 convert 命令行选项。我有两张图片,想要从其中一张减去另一张。

Source Image 减去 Mask 结果为 Result

我知道这必须涉及使用 -composite 命令和 -compose 选项,但我不知道具体是哪个选项。它要么产生与我想要的相反的效果,要么创建一个较小的区域(当被剪切的部分是较小的图像时),要么只是执行其他操作。

注意:在第二张图片中,应减去 alpha 通道,忽略颜色。完全不透明的像素将从结果中完全删除,透明的像素保持不变,部分不透明的像素将部分删除。 第二张图片可能与第一张图片大小不同。最终必须应用几何偏移,并且此处的示例仅用于简化目的。

如何使用命令行实现我想要的效果?

注意:我想要的是 convert 命令行而不是 compose,因为它实际上将成为更长命令行中的最后一步。
3个回答

2

我在IM论坛得到了一些帮助。以下代码实现了我的要求,它从圆形图像复制了alpha通道到方形图像上。这给了我相反的alpha通道,因此我对该通道取反以获得所需结果。

convert square.png circle_small.png -gravity center -compose CopyOpacity \
    -composite -channel A -negate a.png

0
这个按照你描述的方式工作,你可以在命令链的末尾执行这个操作。
convert -channel Alpha -compose subtract -composite circle.png square.png -write mpr:orig +delete \
        -channel RGB -compose add -composite mpr:orig square.png output.png

我使用了mpr来保存第一次操作的结果。显然,诀窍是先减去相应的alpha通道,然后再将减法和平方的RGB通道相加。

这个方法在两个图像大小不相同的情况下无法正常工作,结果将是裁剪图像的尺寸。虽然该命令看起来很有前途。 - edA-qa mort-ora-y
1
在这种情况下,我会首先将磁盘/形状图像放置在与另一张图像相同大小的画布上,然后按照上述所示继续进行。 - Aziraphale

0

我知道你说你想要convert命令行,但这可能帮助你弄清楚如何实现...

convert -negate b.png invb.png
composite -compose Lighten  a.png invb.png c.png

我把你最左边的图像命名为"a",下一个图像命名为"b"。我相信肯定有更简单的方法 - 我们只需要有聪明人来告诉我们!

在第二张图片中,我想要考虑的是 alpha 通道而不是颜色(我不清楚如何显示透明度)。 - edA-qa mort-ora-y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接