pyvips 图像合成没有按预期工作

pyvips Image composite not working as expected

当尝试使用 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 混合正方形。

多个图像文件的合成 (pyvips.Image.new_from_file) 似乎工作正常,但由于以下原因,使用上面生成的图像之一失败:

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

即使所有图片' bands return 4.

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

您的 black() + (1, 2, 3, 4) 将制作一个四波段图像,其中 interpretation 设置为 multiband。这将被 composite 解释为具有三个额外 alpha 通道的单色图像(可能不是最好的猜测)。

您需要将解释设置为sRGB。您不需要将 bands on black 设置为 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')

制作:

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