目錄: 0 引言 1 環境 2 代碼實現 3 後記python
前段時間,微信朋友圈開始出現了一種曬照片新形式,微信好友牆,即在一張大圖片中展現出本身的全部微信好友的頭像。git
效果以下圖,出於隱私考慮,這裏做了模糊處理。github
是否是很炫,並且這仍是獨一無二的,畢竟每一個人的微信好友是不同的。本文就教你們用Python來實現這種效果。微信
操做系統:Windows操作系統
Python版本:3.7.3code
咱們須要首先須要獲取好友的頭像信息,接下來處理圖像並完成圖像的拼接。blog
在這裏,咱們登陸微信獲取好友信息,使用的是 wxpy 模塊;處理並生成最終的圖像藉助 PIL 模塊。由於都是第三方模塊,如環境中沒有可使用 pip 進行安裝。另外涉及路徑的處理等,咱們須要導入 os 模塊和 sys 模塊。圖片
from wxpy import * import PIL.Image as Image import os import sys
咱們要獲取微信好友的頭像,首先須要登陸微信ip
# 初始化機器人,掃碼登錄微信,適用於Windows系統 bot = Bot() # # Linux系統,執行登錄請調用下面的這句 # bot = Bot(console_qr=2, cache_path="botoo.pkl"
在獲取好友頭像信息以前,咱們得先在本地建立一個目錄,用於後續存儲好友頭像的文件。ci
# 獲取當前路徑信息 curr_dir = get_dir(sys.argv[0]) # 若是FriendImgs目錄不存在就建立一個 if not os.path.exists(curr_dir + "FriendImgs/"): os.mkdir(curr_dir + "FriendImgs/")
接下來就是獲取友頭像信息,並將其存儲在本地建立的目錄中。
my_friends = bot.friends(update=True) # 獲取好友頭像信息並存儲在FriendImgs目錄中 n = 0 for friend in my_friends: friend.get_avatar(curr_dir + "FriendImgs/" + str(n) + ".jpg") n = n + 1
這時你就能夠在本地FriendImgs文件夾中,看到保存下來的微信好友頭像的圖片。
製做微信好友牆,就像之前的大字報,把咱們下載的好友頭像逐一貼上去便可。
首先設定好微信好友牆的尺寸,使用 Image.new() 方法。
image = Image.new("RGB", (650, 650))
接下來,咱們須要逐個打開微信好友的圖片,使用 Image.open() 方法。
img = Image.open(curr_dir + "FriendImgs/" + file_names)
將微信頭像圖片,重置爲50*50像素尺寸的小圖,使用 img.resize() 方法。
img = img.resize((50, 50), Image.ANTIALIAS)
而後將圖片黏貼到咱們的照片牆中,使用 image.paste() 方法。
image.paste(img, (x * 50, y * 50))
最後將製做完成的照片牆保存下來,使用 image.save() 方法。
img = image.save(curr_dir + "WeChat_Friends.jpg")
如今咱們將本小節中代碼整合到一塊兒,以下所示:
# 準備生成微信好友頭像牆的尺寸 image = Image.new("RGB", (650, 650)) # 定義初始圖片的位置 x = 0 y = 0 # 獲取下載的頭像文件 curr_dir = get_dir(sys.argv[0]) ls = os.listdir(curr_dir + 'FriendImgs') # 遍歷文件夾的圖片 for file_names in ls: try: # 依次打開圖片 img = Image.open(curr_dir + "FriendImgs/" + file_names) except IOError: continue else: # 從新設置圖片的大小 img = img.resize((50, 50), Image.ANTIALIAS) # 將圖片粘貼到最終的照片牆上 image.paste(img, (x * 50, y * 50)) # 設置每一行排13個圖像 x += 1 if x == 13: x = 0 y += 1 # 保存圖片爲WeChat_Friends.jpg img = image.save(curr_dir + "WeChat_Friends.jpg
代碼執行後,最終生成的效果圖以下:
(這裏展現的圖片作了模糊處理)
本文中設定照片牆尺寸爲650650,而好友頭像尺寸爲5050,這樣最終制做成的照片牆每行有13位好友,共計容納13*13位好友。
你們可根據本身實際狀況,自行調整尺寸參數,以達到最佳效果。你們趕快去生成本身獨一無二的照片牆吧~!
好啦,本文全部內容就到這裏結束啦。其實後面還能夠衍生不少玩法,好比:心行牆、圓牆等。不過邏輯同樣,就是代碼處理起來會比較麻煩。有興趣的能夠先本身試試,或者等我……
代碼已上傳至Github:https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/Tool/Wechat_Photo_Wall
關注公衆號「Python專欄」瞭解更多有趣的Python~