我正在尝试用 Wand 合成两个图像。计划是将图像 B 放在 A 的右侧,并使 B 透明 60%。使用 IM 可以这样完成:
composite -blend 60 -geometry +1000+0 b.jpg a.jpg new.jpg
但是使用 Wand 我只能通过该composite()
方法看到以下内容:operator, left, top, width, height, image
.
用Wand可以吗?
我正在尝试用 Wand 合成两个图像。计划是将图像 B 放在 A 的右侧,并使 B 透明 60%。使用 IM 可以这样完成:
composite -blend 60 -geometry +1000+0 b.jpg a.jpg new.jpg
但是使用 Wand 我只能通过该composite()
方法看到以下内容:operator, left, top, width, height, image
.
用Wand可以吗?
为了并排完成-geometry +1000+0
,您可以将图像并排合成到新图像上。对于此示例,我将Image.composite_channel用于所有内容。
with Image(filename='rose:') as A:
with Image(filename='rose:') as B:
B.negate()
with Image(width=A.width+B.width, height=A.height) as img:
img.composite_channel('default_channels', A, 'over', 0, 0 )
img.composite_channel('default_channels', B, 'blend', B.width, 0 )
请注意,复合运算符在上面的示例中并没有太大影响。
要实现-blend 60%
,您将创建一个 60% 的新 Alpha 通道,并将其“复制”到源不透明度通道。
我将创建一个辅助函数来说明这种技术。
def alpha_at_60(img):
with Image(width=img.width,
height=img.height,
background=Color("gray60")) as alpha:
img.composite_channel('default_channels', alpha, 'copy_opacity', 0, 0)
with Image(filename='rose:') as A:
with Image(filename='rose:') as B:
B.negate()
with Image(width=A.width+B.width, height=A.height) as img:
img.composite_channel('default_channels', A, 'over', 0, 0 )
alpha_at_60(B) # Drop opacity to 60%
img.composite_channel('default_channels', B, 'blend', B.width, 0 )