pillow Image.alpha_composite Image.blend Image.paste 图像合并方法汇总

Image.alpha_composite( )——实现一张背景透明图像和一张背景不透明图像的合成
分别是mask.jpg, image.jpg,final.jpg。

合成图片的要求:
底片背景的透明度不改变,所以Image.blend( )不适用;
因为mask背景是透明的,图案是半透明的,所以需要转成’RGBA’模式,如果不转模式会报错;但是!!!在存储图片的时候要转回’RGB’格式。
我们用Image.alpha_composite( )来实现,代码如下。

import PIL.Image as Image

layer1 = Image.open("image.jpg").convert('RGBA')   # 底图背景
layer2 = Image.open("mask.png").convert('RGBA')    # mask


final = Image.new("RGBA", layer1.size)             # 合成的image
final = Image.alpha_composite(final, layer1)
final = Image.alpha_composite(final, layer2)

final=final.convert('RGB')
final.save('image_mask.jpg')

Image.blend( )方法:

函数是:Image.blend(image, mask, alpha),
合成原理是:i m a g e ∗ ( 1 − a l p h a ) + m a s k ∗ a l p h a image * ( 1 - alpha ) + mask * alphaimage∗(1−alpha)+mask∗alpha
from PIL import Image

layer1 = Image.open("image.jpg").convert('RGBA')
layer2 = Image.open("mask.png").convert('RGBA')

img = Image.blend(layer1, layer2, 0.3)
img_1 = Image.blend(layer1, layer2, 0.7)

img = img.convert('RGB')
img.save('image_mask_0.jpg')
img_1 = img_1.convert('RGB')
img_1.save('image_mask_1.jpg')

Image.paste( )方法:
其实和Image.alpha_composite( )的差别不大,在细节上尤其是半透明图案的处理上,Image.alpha_composite( )的效果会更好。

import PIL.Image as Image

layer1 = Image.open("image.jpg").convert('RGBA')
layer2 = Image.open("mask.png").convert('RGBA')

final1 = Image.new("RGBA", layer1.size)
final1.paste(layer1, (0,0), layer1)
final1.paste(layer2, (0,0), layer2)

final1=final1.convert('RGB')
final1.save('image_mask_2.jpg')

报错记录:ValueError: bad transparency mask
原因: 合成过程中,image和mask没有转成’RGBA’的模式;
解决方法: mask = mask.convert(‘RGBA’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值