Python 当用透明度覆盖图像时,魔杖合成功能是否存在缺陷?
我在Windows7电脑上使用ImageMagick 7.0.8-27 Q16 x64 2019-02-09和Wand 0.5.1 我想在背景图像上覆盖一个带有透明背景的文本图像 composite()为每个复合操作符创建完全相同的灰度图像Python 当用透明度覆盖图像时,魔杖合成功能是否存在缺陷?,python,imagemagick,wand,Python,Imagemagick,Wand,我在Windows7电脑上使用ImageMagick 7.0.8-27 Q16 x64 2019-02-09和Wand 0.5.1 我想在背景图像上覆盖一个带有透明背景的文本图像 composite()为每个复合操作符创建完全相同的灰度图像 #!/usr/bin/env python import collections.abc from wand.image import Image, COMPOSITE_OPERATORS from wand.drawing import Drawing
#!/usr/bin/env python
import collections.abc
from wand.image import Image, COMPOSITE_OPERATORS
from wand.drawing import Drawing
wand_imageBackdrop = Image(filename='c:\\temp\\backdrop.png')
wand_imageOverlay = Image(filename='c:\\temp\\overlay.png')
for strCompositeOperator in COMPOSITE_OPERATORS:
wand_imageBackdropClone = wand_imageBackdrop.clone()
wand_imageOverlayClone = wand_imageOverlay.clone()
with Drawing() as draw:
draw.composite(operator=strCompositeOperator, left=0, top=0,
width=1080, height=1050, image=wand_imageOverlayClone)
draw(wand_imageBackdropClone)
wand_imageBackdropClone.save(filename='C:\\Temp\\composite_test_' + \
strCompositeOperator + '.png')
wand_imageBackdropClone.close()
wand_imageOverlayClone.close()
wand_imageBackdrop.close()
wand_imageOverlay.close()
下面是背景图片。
下面是覆盖图。
每个复合操作符都会创建以下完全相同的灰度图像。
有人能解释一下吗?有办法解决这个问题吗
下面的StackOverflow帖子对这个问题有一些启示
是否使用唯一的方法在背景图像上正确覆盖具有透明度的图像?尝试将背景图像的类型更改为
truecolor
(),使用truecolor或truecoloralpha(例如wand_ImageBackground.type='truecolor')保留文本颜色,但它为每个复合操作符生成完全相同的输出图像,就像每次都使用“over”操作符一样。它解决了我的问题,但它不是覆盖透明图像的一般解决方案,因为Wand.ImageMagick中的每个合成操作符都会使输出与序列中的第一个图像的类型相同。您必须在写入输出之前,根据ImageMagick的哪个版本,通过指定type=truecoloralpha或truecolormatte来覆盖该行为。对不起,我对旺德不太了解。或者您可以更改图像的顺序,并使用另一种合成方法,如dst_over。除了调整一个图像的大小外,由于它们的大小不同,请尝试使用等效的convert over.png back.png-compose dst_over-composite result.png
您是否尝试过使用composite_通道而不是draw.composite?你是说draw.composite不起作用,不管使用什么复合运算符,结果都是一样的。所以我想也许复合_通道可以正常工作。对于PNG,要在命令行中获取truecoloralpha图像,需要在输出文件名前面加上PNG32:,例如PNG32:outfile.suffix。我不知道wand是否支持这一点。尝试使用truecolor或truecoloralpha(例如wand_ImageBackground.type='truecolor')将背景图像的类型更改为truecolor
(),以保留文本颜色,但它会为每个复合操作符生成完全相同的输出图像,就像每次都使用“over”操作符一样。它解决了我的问题,但它不是覆盖透明图像的一般解决方案,因为Wand.ImageMagick中的每个合成操作符都会使输出与序列中的第一个图像的类型相同。您必须在写入输出之前,根据ImageMagick的哪个版本,通过指定type=truecoloralpha或truecolormatte来覆盖该行为。对不起,我对旺德不太了解。或者您可以更改图像的顺序,并使用另一种合成方法,如dst_over。除了调整一个图像的大小外,由于它们的大小不同,请尝试使用等效的convert over.png back.png-compose dst_over-composite result.png
您是否尝试过使用composite_通道而不是draw.composite?你是说draw.composite不起作用,不管使用什么复合运算符,结果都是一样的。所以我想也许复合_通道可以正常工作。对于PNG,要在命令行中获取truecoloralpha图像,需要在输出文件名前面加上PNG32:,例如PNG32:outfile.suffix。我不知道旺德是否支持这一点。