來自:高階農民工(微訊號:Mocun6)
上午發了張微信近 2000 位好友的頭像拼圖,讓大夥兒看能不能快速找到自己的頭像,沒想到反響很強烈,引得陣陣驚呼與膜拜,沒有料到。
有沒有犯密集恐懼症?這並不震撼,如果你有 5000 位好友的話,做出來的圖看著會更刺激些。
看完了圖,你可能想知道這個圖咋做出來的,不會是我閑著無聊把把好友頭像一個個儲存下來再用 PS 拼的吧?
自然不是了,Python 做的,是不是覺得沒有 Python 乾不了的事兒。其實,這種圖很早就有人玩過了,不過下麵還是來說說怎麼做出來,這樣你可以做一個自己的微信好友圖片牆,拿去朋友圈裝裝逼。
有兩種方法,一種簡單的,不用接觸 Python 程式碼,一種稍微複雜點,需要寫程式碼。
先說簡單的方法,只需要兩步:執行程式然後掃微信二維碼就行了。剩下的交給程式自己蹦躂,泡杯茶在電腦前等待幾分鐘左右就可以得到圖片,具體的等待時間視微信好友數量而不同,我近 2000 好友,用時 10 分鐘左右。
一個簡單的操作示意圖:
幾分鐘後就可以得到上面的圖片了。
其實到這兒就完了,是不是很簡單。
你要感興趣怎麼實現的,可以往下看用 Python 程式碼怎麼實現的,程式碼不長,60 行就可以搞定。
核心是利用三個個庫:
- wxpy 庫,用於獲取好友頭像然後下載
- Pillow 庫,用於拼接頭像
- Pyinstaller 庫,用來打包 Python 程式成 exe 檔案
程式透過三個函式實現,第一個 creat_filepath 函式生成圖片下載檔案路徑,第二個 save_avatar 函式迴圈獲取微信好友頭像然後儲存到本地,第三個 joint_avatar 函式就是把頭像拼接成一張大圖。
完整程式碼如下:
1# -*- coding: utf-8 -*-
2from wxpy import *
3import math
4from PIL import Image
5import os
6
7# 建立頭像存放檔案夾
8def creat_filepath():
9 avatar_dir = os.getcwd() + "\\wechat\\"
10 if not os.path.exists(avatar_dir):
11 os.mkdir(avatar_dir)
12 return avatar_dir
13
14# 儲存好友頭像
15def save_avatar(avatar_dir):
16 # 初始化機器人,掃碼登陸
17 bot = Bot()
18 friends = bot.friends(update=True)
19 num = 0
20 for friend in friends:
21 friend.get_avatar(avatar_dir + '\\' + str(num) + ".jpg")
22 print('好友暱稱:%s' % friend.nick_name)
23 num = num + 1
24
25# 拼接頭像
26def joint_avatar(path):
27 # 獲取檔案夾內頭像個數
28 length = len(os.listdir(path))
29 # 設定畫布大小
30 image_size = 2560
31 # 設定每個頭像大小
32 each_size = math.ceil(2560 / math.floor(math.sqrt(length)))
33 # 計算所需各行列的頭像數量
34 x_lines = math.ceil(math.sqrt(length))
35 y_lines = math.ceil(math.sqrt(length))
36 image = Image.new('RGB', (each_size * x_lines, each_size * y_lines))
37 x = 0
38 y = 0
39 for (root, dirs, files) in os.walk(path):
40 for pic_name in files:
41 # 增加頭像讀取不出來的異常處理
42 try:
43 with Image.open(path + pic_name) as img:
44 img = img.resize((each_size, each_size))
45 image.paste(img, (x * each_size, y * each_size))
46 x += 1
47 if x == x_lines:
48 x = 0
49 y += 1
50 except IOError:
51 print("頭像讀取失敗")
52
53 img = image.save(os.getcwd() + "/wechat.png")
54 print('微信好友頭像拼接完成!')
55
56if __name__ == '__main__':
57 avatar_dir = creat_filepath()
58 save_avatar(avatar_dir)
59 joint_avatar(avatar_dir)
可以直接在執行程式檔案,也可以用 Pyinstaller 檔案打包後執行。這裡額外說一下 pyinstaller 打包的方法和閉坑指南。
不要直接在系統中用 pyinstaller 打包,否則打包出來的 exe 檔案會很大。建議在虛擬環境中打包,打包出來的 exe 檔案會小很多, 10MB 左右。
虛擬環境建立很簡單,簡單說一下步驟:
1 安裝 pipenv 和 pyinstaller 包,用於後續建立虛擬環境和打包程式:
1pip install pipenv
2pip install pyinstaller # 已安裝就不用安裝了
2 選擇一個合適的目錄作為 Python 虛擬環境,執行:
1pipenv install # 建立虛擬環境
2pipenv shell # 建立好後,進入虛擬環境
3 安裝程式取用的庫,上面程式取用了四個庫:wxpy、math、os 和 PIL,一行程式碼就可以完成安裝。
1pipenv install wxpy math os
4 這裡要額外註意 PIL 的安裝,現在不用 PIL 庫,而是用 Pillow 庫取代,所以安裝 Pillow 庫就行。但不要安裝最新的 6.0.0 版本,否則可能會遇到各種錯誤,例如:PIL 無法識別下載的 jpg 頭像檔案。
1OSError: cannot identify image file
正確的安裝方法是安裝低版本,經嘗試安裝 4.2.1 版本沒有問題,安裝命令:
1pipenv install Pillow==4.2.1
5 然後打包程式就可以了:
1pyinstaller -F C:\Users\sony\Desktop\wechat_avatar.py
2# 程式路徑要改成你電腦上的路徑
3# -F 表示生成單個 exe 檔案,方便執行
執行如下:
執行命令,1 分鐘左右若顯示 successfully 字樣表示程式打包成功:
接著在程式目錄下找到 wechat_avatar.exe
檔案,然後按照第一種方法那樣執行就行了。
以上就是用 Python 製作微信好友圖片牆的裝逼指南。
朋友會在“發現-看一看”看到你“在看”的內容