3

我有两个相同大小的 png 图像(A 和 B),第二个(B)是部分透明的。

如果我使用代码将图像 B 粘贴到图像 A 中

base.paste(overlay, mask=overlay)

我得到了它们的近乎完美的组合。

但是我想在将图像 B 粘贴到图像 A 之前使其变亮。我尝试使用像 Image.new("L", size, 80) 这样的蒙版,我可以用它使图像(B)变亮,但它也会使图像变暗( A) 并且不得修改。

在命令行上,我可以像这样使用 ImageMagick 做我想做的事:

composite -dissolve 40 overlay.png base.png result.png

这正是我所需要的,但我怎么能用 python 做到这一点。

4

1 回答 1

5

根据我自己的理解,溶解选项仅修改 Alpha 通道。因此,如果您希望您的 alpha 通道仅保留其值的 40%,您可以在 PIL 中执行相同的操作:

from PIL import Image

overlay = Image.open('overlay.png')
base = Image.open('base.png')

bands = list(overlay.split())
if len(bands) == 4:
    # Assuming alpha is the last band
    bands[3] = bands[3].point(lambda x: x*0.4)
overlay = Image.merge(overlay.mode, bands)

base.paste(overlay, (0, 0), overlay)
base.save('result.png')

在这段代码中,我将图像分割成多个波段。如果有四个,我假设最后一个代表 alpha 通道。所以我只需将其值乘以 0.4 (40%),然后创建一个新图像以粘贴到基础图像上。

于 2012-12-09T14:47:03.470 回答