使用Python Wand进行构图遮罩

时间:2013-09-21 23:09:02

标签: python imagemagick wand

我正在尝试使用Python Wand实现以下ImageMagick命令:

convert red_image.png  green_image.png  write_mask.png -composite masked_composite.png

以下是图片中的示例:

enter image description here

任何提示?

更新:如果有人想知道,这是我的解决方案。注意:不优雅,但有效。

bash_command = "convert "+str(red_image.png)+" "+str(green_image.png)+" write_mask.png -   composite "+str(red_image.png)+str(green_image.png)+".jpg"
os.system(bash_command)

1 个答案:

答案 0 :(得分:0)

解决方案是使用copy_opacity composite operator,它采用黑白源图像,并将目标图像的Alpha通道替换为其内容。

这是我在项目中使用的apply_mask函数:

def apply_mask(image, mask, invert=False):
    image.alpha_channel = True
    if invert:
        mask.negate()
    with Image(width=image.width, height=image.height, background=Color("transparent")) as alpha_image:
        alpha_image.composite_channel(
            "alpha",
            mask,
            "copy_opacity",
            0, 0)
        image.composite_channel(
            "alpha",
            alpha_image,
            "multiply",
            0, 0)

首先,我确保要应用蒙版的图像具有Alpha通道,并检查我们是否要将蒙版反转。然后我们使用蒙版替换新透明图像的alpha通道。我们这样做,以便我们可以将此生成的Alpha通道与目标图像上已存在的任何Alpha通道组合。如果我们将copy_opacity的掩码直接应用于我们的图像而没有这个中间步骤,它将替换它的alpha通道(而不是合并它们),破坏它的任何原始alpha通道数据。