pyvips图像合成无法正常工作

时间:2019-04-01 17:07:48

标签: python vips

当尝试使用pyvips 2.1.5合成图像时:

import pyvips

i1 = pyvips.Image.black(100, 100, bands=4) + (255, 0, 0, 128)
i2 = pyvips.Image.black(10, 10, bands=4) + (0, 255, 0, 128)
i1.composite(i2, 'over').write_to_file('output.png')

它输出尺寸为10x10px的绿色正方形,而不是预期的100x100px的alpha混合正方形。

output.png

也可以对多个图像文件(pyvips.Image.new_from_file)进行合成,但是,由于以下原因,使用上面生成的图像之一失败了:

pyvips.error.Error: unable to call composite
composite: images do not have same numbers of bands

即使所有图像的bands返回4

我用错了吗? 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您的black() + (1, 2, 3, 4)将制作一个四波段图像,其中interpretation设置为multibandcomposite会将其解释为具有三个额外Alpha通道的单色图像(也许不是最好的猜测)。

您需要将解释设置为sRGB。您无需将黑色的bands设置为4,+的RHS会自动将其覆盖。

尝试:

import pyvips

i1 = (pyvips.Image.black(100, 100) + (255, 0, 0, 128)).copy(interpretation="srgb")
i2 = (pyvips.Image.black(10, 10) + (0, 255, 0, 128)).copy(interpretation="srgb")
i1.composite(i2, 'over').write_to_file('output.png')

制作:

result image

相同的技巧可以解决将黑色与图像文件合成的问题。