2012-12-01 152 views
3

我有两个相同大小的PNG图像(A & B),第二个(B)一个是部分透明的。Python(PIL):减少透明图像并粘贴到另一个

如果我使用的代码

base.paste(overlay, mask=overlay) 

图像B粘贴到一个像我得到他们的近乎完美的组合。

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

在命令行中,我可以做我想做与ImageMagick的那样:

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

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

回答

3

从我自己的理解,溶解选项只修改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%)的值,并创建一个新的图像粘贴在基础图像上。

+0

非常感谢。我必须将两个图像转换为“RGBA”,然后获得与上述imagemagick命令相同的结果。再次感谢!!! – t777

+0

我已经尝试了一些,如果我使用原始叠加图像作为第一个参数在paste-method和修改后的叠加图像作为掩码,我得到了最好的结果:'base.paste(overlay,mask =面膜)' – t777

相关问题