Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当用透明度覆盖图像时,魔杖合成功能是否存在缺陷?_Python_Imagemagick_Wand - Fatal编程技术网

Python 当用透明度覆盖图像时,魔杖合成功能是否存在缺陷?

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

我在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

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。我不知道旺德是否支持这一点。