前言
相信微信大家是用得再多也不過了。那么,對於python+微信,又能玩出什么新的花樣呢?下面小編就給大家帶來一個好玩的東西。用python下載所有的微信好友的頭像,然后拼接成一張大圖。這樣,大家就可以轉載到朋友圈裝XY了。哈哈。
還是先給大家看看效果圖如何。畢竟無圖言X。

PS:圖侵刪。這不是小編的微信哈……
好了廢話不多說,看看我們是怎么一步一步做出來的吧。
下載微信好友頭像
第一步當然是下載微信好友的頭像,然后才能進行拼接。這里我們用到了itchat這個python的庫。關於這個庫,更多好玩的東西我們在后期會推出的,大家敬請關注and期待就好了。先看代碼:
1itchat.auto_login()
2for friend in itchat.get_friends(update=True)[0:]:
3 #可以用此句print查看好友的微信名、備注名
4 print(friend['NickName']+"("+friend['RemarkName']+")")
5 img = itchat.get_head_img(userName=friend["UserName"])
6 path = headImgPath+friend['NickName']+"("+friend['RemarkName']+").jpg"
7 try:
8 with open(path,'wb') as f:
9 f.write(img)
10 except Exception as e:
11 print(repr(e))
代碼灰常簡單。首先我們調用itchat.auto_login()進行微信登陸。

掃碼登陸成功以后,我們再獲取好友,然后獲取頭像,再配置一下文件保存路徑,最后把頭像寫入文件里面。是不是簡單到難以置信?

拼接好友頭像
拼接我們用了PIL庫里面的Image模塊。代碼看下面:
1pathList = []
2# os.listdir() 方法用於返回指定的文件夾包含的文件或文件夾的名字的列表。這個列表以字母順序。 它不包括 '.' 和'..' 即使它在文件夾中。
3for item in os.listdir(headImgPath):
4 imgPath = os.path.join(headImgPath, item)
5 pathList.append(imgPath)
6
7total = len(pathList)#total是好友頭像圖片總數
8line = int(sqrt(total))#line是拼接圖片的行數(即每一行包含的圖片數量)
9NewImage = Image.new('RGB', (128*line,128*line))
10x = y = 0
11for item in pathList:
12 try:
13 img = Image.open(item)
14 # Image.ANTIALIAS:平滑濾波。對所有可以影響輸出像素的輸入像素進行高質量的重采樣濾波,以計算輸出像素值。
15 img = img.resize((128,128),Image.ANTIALIAS)
16 NewImage.paste(img, (x * 128 , y * 128))
17 x += 1
18 except IOError:
19 print("第%d行,%d列文件讀取失敗!IOError:%s" % (y,x,item))
20 x -= 1
21 if x == line:
22 x = 0
23 y += 1
24 if (x+line*y) == line*line:
25 break
26NewImage.save("final.jpg")
我們先是用os.listdir獲取了所有頭像的路徑保存到pathList里面。接着創建一個大圖片,將大圖片划分為n個小方格,再往小方格里面塞好友頭像。需要注意的是,在塞好友頭像前,需要對頭像進行縮略變小才能塞進去。最后,生成最終文件。在當前目錄下即可找到final.jpg。即為我們的成品。大家就可以拿着它去朋友圈裝逼了~

本來想弄一個現成的供大家下載使用,不過想想還是算了。大家直接下載python源碼運行即可。
欲獲取代碼,請關注我們的微信公眾號【程序猿聲】,在后台回復:txpj。即可下載。
