Python(PIL):减轻透明图像并粘贴到另一个图像

时间:2012-12-01 18:06:03

标签: python transparency python-imaging-library imaging

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

如果我使用代码

将图像B粘贴到图像A中
base.paste(overlay, mask=overlay)

我得到了几乎完美的组合。

但是我希望在将图像粘贴到图像A之前使图像B变亮。我尝试使用像Image.new(“L”,大小,80)这样的蒙版,我可以用它来照亮图像(B),但它也是使图像(A)变暗并且不得修改。

在命令行上,我可以像ImageMagick那样做我想要的东西:

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

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

1 个答案:

答案 0 :(得分:3)

根据我自己的理解,dissolve选项仅修改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%),然后创建一个新图像粘贴在基本图像上。