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

到這裏就結束啦~  註釋寫的也很清楚

以後有更好的方法再來更新

如果有着急的問題,可以掃上面二維碼,點聯繫店主,來加微信找到我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章