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

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

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

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

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值