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')
到這裏就結束啦~ 註釋寫的也很清楚
以後有更好的方法再來更新
如果有着急的問題,可以掃上面二維碼,點聯繫店主,來加微信找到我