python使用pil库实现图片合成实例代码
作者:lwli 发布时间:2022-01-15 21:17:39
标签: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') # 保存图片
来源:https://www.cnblogs.com/lilinwei340/p/6474170.html


猜你喜欢
- 感想我们在做深度学习处理图片的时候,如果是自己制作或者收集的数据集,不可避免的要对数据集进行处理,然后大多数模型都只支持RGB格式的图片,这
- echarts legend点击事件首先,明确本篇文章的重点,主要有三个:1. 给legend添加点击事件2. 禁用legend点击事件的默
- 概述在JavaScript前端开发中,函数与对其状态即词法环境(lexical environment)的引用共同构成闭包(closure)
- 代码都比较容易理解的,主要就是在以16进制读取图片信息那段代码有点乱,其实仔细看看,也没什么的。glabal.cssbody{}{ &nbs
- <?php function getDerivativeByFormulaAndXDATA($formula, $x_data){ $
- 问题背景a=[1,4,2,1,5,6,9,0]#删除列表中的元素,其所在的位置为[1,3,7]del_index=[1,3,7]tmp=[i
- 参考廖雪峰的Python教程,实现Linux Python3获取雅虎天气#!/usr/bin/env python3# coding: ut
- 使用pandas下的cumsum函数cumsum:计算轴向元素累积加和,返回由中间结果组成的数组.重点就是返回值是"由中间结果组成
- 前言pickle 模块可以对一个 Python 对象的二进制进行序列化和反序列化。说白了,就是它能够实现任意对象与二进制直接的相互转化,也可
- 在 MySQL 中,可以使用 ALTER TABLE 语句来添加表字段。以下是一些示例代码,可以批量添加多个字段:1 m
- 1.下载python2.7.xwget https://www.python.org/ftp/python/2.7.6/Python-2.7
- 假如你用SQL2005做一个数据库备份,然后把这个备份到装有SQL2000的服务器去恢复,是恢复不了,同样,你把SQL2005数据库附加到S
- 微信网页授权认证根据微信官方文档,网页授权需要四个步骤, - 用户同意授权-获取code - 通过code 获取网页授权access_tok
- DELETE 语句DELETE 语句用于删除记录,语法如下:(与 “UPDATE” 语法较为相似)D
- 利用百度api实现人像动漫化百度API地址:https://ai.baidu.com/tech/imageprocess/selfie_an
- 1 写在前面1. 本文介绍的是基于TensorFlow tf.estimator接口的深度学习网络,而非TensorFlow&nb
- 每次访问报表都需要windows验证,这样的报表给客户确实很说不过去.SSRS 可以匿名登录的设定步骤:环境:开发工具:SQL Server
- 1. 使用性能分析器Golang提供了内置的性能分析工具 pprof,可以帮助您分析和优化应用程序的性能瓶颈。下面是使用 
- 有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激。功能介绍:1、若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时
- IDEA 插件安装 步骤IDEA里面,选择打开 File --> Settings --> Plugins在Plugins里面,