这篇文章主要介绍了 python PIL 实现图片合成实例代码, 小编觉得还是挺不错的, 具有一定借鉴价值, 需要的朋友可以参考下
本文研究的主要是 python PIL 实现图片合成的相关内容, 具体介绍如下, 分享实例代码
在项目中需要将两张图片合在一起遇到两种情况, 一种就是两张非透明图片的合成, 一种是涉及到透明 png 的合成
相关 API 见 http://pillow.readthedocs.io/en/latest/reference/Image.html
第一种情况, 直接将两张图片合在一起就可以了如下图所示, 将两张图片合在一起
+=
详细代码
- from PIL import Image
- #加载底图
- base_img = Image.open(ur'D:\Desktop\1.png')
- # 可以查看图片的 size 和 mode, 常见 mode 有 RGB 和 RGBA,RGBA 比 RGB 多了 Alpha 透明度
- # print base_img.size, base_img.mode
- box = (166, 64, 320, 337) # 底图上需要 P 掉的区域
- #加载需要 P 上去的图片
- tmp_img = Image.open(ur'D:\Desktop\2.png')
- #这里可以选择一块区域或者整张图片
- #region = tmp_img.crop((0,0,304,546)) #选择一块区域
- #或者使用整张图片
- region = tmp_img
- #使用 paste(region, box) 方法将图片粘贴到另一种图片上去.
- # 注意, region 的大小必须和 box 的大小完全匹配但是两张图片的 mode 可以不同, 合并的时候回自动转化如果需要保留透明度, 则使用 RGMA mode
- #提前将图片进行缩放, 以适应 box 区域大小
- # region = region.rotate(180) #对图片进行旋转
- region = region.resize((box[2] - box[0], box[3] - box[1]))
- base_img.paste(region, box)
- #base_img.show() # 查看合成的图片
- base_img.save('./out.png') #保存图片
第一种情况时候规则的图片进行合并, 比如矩形, 难以对于任意形状的图片对于任意形状的合并可以考虑使用透明的 PNG 来完成
第二种情况, 将非透明的图片放在底部, 上面放一张局部透明的 png 图片, 然后合成一张图片
代码
- from PIL import Image
- #加载中间透明的手机图片
- base_img = Image.open(ur'D:\Desktop\3.png')
- #新建透明底图, 大小和手机图一样, mode 使用 RGBA, 保留 Alpha 透明度, 颜色为透明
- #Image.new(mode, size, color=0),color 可以用 tuple 表示, 分别表示 RGBA 的值
- target = Image.new('RGBA', base_img.size, (0, 0, 0, 0))
- box = (166, 64, 320, 337) #区域
- # 加载需要狐狸像
- region = Image.open(ur'D:\Desktop\4.png')
- region = region.rotate(180) #旋转 180 度
- #确保图片是 RGBA 格式, 大小和 box 区域一样
- region = region.convert("RGBA")
- region = region.resize((box[2] - box[0], box[3] - box[1]))
- #先将狐狸像合成到底图上
- target.paste(region,box)
- #将手机图覆盖上去, 中间透明区域将狐狸像显示出来
- target.paste(base_img,(0,0),base_img) #第一个参数表示需要粘贴的图像, 中间的是坐标, 最后是一个是 mask 图片, 用于指定透明区域, 将底图显示出来
- # target.show()
- target.save('./out.png') # 保存图片
来源: http://www.phperz.com/article/18/0220/362964.html