python3 用PIL.Image处理图片,把小程序二维码logo替换为自己的头像
程序员文章站
2022-05-31 23:08:04
...
1. 小程序原始图片,图片大小430 * 430 px, 自己的头像120 * 120px,下面图片依次为:原来的小程序二维码图、我的头像、替换头像后的图片。
好了。效果展示完了。下面上代码,看干货
1. 方法1,先把中间logo区域清空成白色(别的颜色也可以,自己换),然后把头像选定区域,粘贴到处理过的白色区域
这种方法有个局限性就是裁剪区域是正方形,不是圆形
#先安装PIL导入Image
from PIL import Image
def paste_two_images():
#小程序原图
img = Image.open("wx_QRCode.jpg")
#我的头像
img2 = Image.open("touxiang-120.jpeg")
#先取到小程序原图中间的大小,把中间的logo清掉
pix = img.load()
for i in range(145, 285):
for j in range(145, 285):
pix[i, j] = (255,255,255)
#到这儿的时候中间logo位置已经清成白色了
#原图大小
QRwidth = 430
#我的头像大小
width = 120
#选取我的头像要粘贴的区域
img2 = img2.crop((0, 0, width, width))
#把我的头像要粘贴的区域,粘贴到原图的指定位置
img.paste(img2, (int(QRwidth/2 -width/2), int(QRwidth/2 - width/2), int(QRwidth/2 + width/2), int(QRwidth/2 + width/2)))
#保存最终图片
img.save('myImgQRCode.png')
2. 方法2,比较复杂,但是接近完美啦。需要3张图,原图,mask图,logo图:这个logo可以设置随意大小,计算好缩放比例后,粘贴到new出来的透明图上。然后再跟原图,mask图混叠
from PIL import Image
def composite_two_images():
#微信小程序原图
img = Image.open("wx_QRCode.jpg")
#中间logo区域为实,周围二维码区域为透明的图片(用来做mask)
img2 = Image.open("430.png")
#我的头像
img3 = Image.open("touxiang-120.jpeg")
#都处理为RGBA
img = img.convert('RGBA')
img2 = img2.convert('RGBA')
img3 = img3.convert('RGB')
#比较头像宽高,计算缩放比例
maxedg = max(img3.height,img3.width)
width = int(120 * img3.width/maxedg)
height = int(120 * img3.height/maxedg)
#计算好合适的缩放宽高后,重置logo图片大小
img3s = img3.resize((width,height),resample = Image.BILINEAR)
#新创建一张和二维码一样大的透明图,把处理后的logo粘贴上去
imgNew = Image.new("RGB", (430, 430), color=(255,255,255))
imgNew.paste(img3s, (215 - int(width/2), 215 - int(height/2)))
#最后把经过处理的图、原图、mask叠上去
myImgQRCode = Image.composite(imgNew, img, img2)
myImgQRCode.save('myImgQRCode.png')
到这里就结束啦~ 注释写的也很清楚
以后有更好的方法再来更新
如果有着急的问题,可以扫上面二维码,点联系店主,来加微信找到我