欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python3 用PIL.Image处理图片,把小程序二维码logo替换为自己的头像

程序员文章站 2022-05-31 23:08:04
...

1. 小程序原始图片,图片大小430 * 430 px, 自己的头像120 * 120px,下面图片依次为:原来的小程序二维码图、我的头像、替换头像后的图片。

python3 用PIL.Image处理图片,把小程序二维码logo替换为自己的头像python3 用PIL.Image处理图片,把小程序二维码logo替换为自己的头像python3 用PIL.Image处理图片,把小程序二维码logo替换为自己的头像

好了。效果展示完了。下面上代码,看干货

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')

到这里就结束啦~  注释写的也很清楚

以后有更好的方法再来更新

如果有着急的问题,可以扫上面二维码,点联系店主,来加微信找到我