Python之微信-微信好友頭像合成

仔細看下圖,你的頭像就藏在裏面哦!!!

《Python之微信-微信好友頭像合成》

有沒有犯密集恐懼症?這並不震撼,如果你有 5000 位好友的話,做出來的圖看着會更刺激些。

看完了圖,你可能想知道這個圖咋做出來的,不會是我閑着無聊把把好友頭像一個個保存下來再用 PS 拼的吧?

自然不是了,Python 做的,是不是覺得沒有 Python 幹不了的事兒。其實,這種圖很早就有人玩過了,不過下面還是來說說怎麼做出來,這樣你可以做一個自己的微信好友圖片牆,拿去朋友圈裝裝逼。

有兩種方法,一種簡單的,不用接觸 Python 代碼,一種稍微複雜點,需要寫代碼。

先說簡單的方法,只需要兩步:運行程序然後掃微信二維碼就行了。剩下的交給程序自己蹦躂,泡杯茶在電腦前等待幾分鐘左右就可以得到圖片,具體的等待時間視微信好友數量而不同,我近 500 好友,用時 5 分鐘左右。

幾分鐘后就可以得到上面的圖片了。

其實到這兒就完了,是不是很簡單。

你要感興趣怎麼實現的,可以往下看用 Python 代碼怎麼實現的,代碼不長,60 行就可以搞定。

核心是利用以下兩個庫:

  1. pip –default-timeout=100 install -U wxpy
  2. pip –default-timeout=100 install -U pillow==4.2.1

程序通過三個函數實現,第一個 create_file_path 函數生成圖片下載文件路徑,第二個 save_wx_avater 函數循環獲取微信好友頭像然後保存到本地,第三個 joint_wx_avatar 函數就是把頭像拼接成一張大圖。

完整代碼如下:

from wxpy import *
import math
from PIL import Image
import os


# 創建頭像存放文件夾
def create_file_path():
    avatar_dir = os.path.join(os.getcwd(), 'wechat')
    if not os.path.exists(avatar_dir):
        os.mkdir(avatar_dir)
    return avatar_dir


# 保存好友頭像
def save_wx_avater(avatar_dir):
    # 初始化機器人,掃碼登陸
    bot = Bot(cache_path=True)
    friends = bot.friends(update=True)
    num = 0
    for friend in friends:

        friend.get_avatar(os.path.join(avatar_dir, f'{str(num)}.jpg'))
        print('好友昵稱:%s' % friend.nick_name)
        num = num + 1


# 拼接頭像
def joint_wx_avatar(path):
    # 獲取文件夾內頭像個數
    length = len(os.listdir(path))
    # 設置畫布大小
    image_size = 2560
    # 設置每個頭像大小
    each_size = math.ceil(2560 / math.floor(math.sqrt(length)))
    # 計算所需各行列的頭像數量
    x_lines = math.ceil(math.sqrt(length))
    y_lines = math.ceil(math.sqrt(length))
    image = Image.new('RGB', (each_size * x_lines, each_size * y_lines))
    x = 0
    y = 0
    for (root, dirs, files) in os.walk(path):
        for pic_name in files:
            # 增加頭像讀取不出來的異常處理
            try:
                with Image.open(os.path.join(path, pic_name)) as img:
                    img = img.resize((each_size, each_size))
                    image.paste(img, (x * each_size, y * each_size))
                    x += 1
                    if x == x_lines:
                        x = 0
                        y += 1
            except Exception as e:
                print(F"頭像讀取失敗,錯誤:{e}")

    img = image.save(os.path.join(os.getcwd(), 'wechat.png'))
    print('微信好友頭像拼接完成!')


if __name__ == '__main__':
    avatar_dir = create_file_path()
    save_wx_avater(avatar_dir)
    joint_wx_avatar(avatar_dir)

可以直接在運行程序文件,也可以用 Pyinstaller 文件打包后運行,我這裏就不介紹 pipenv+pyinstaller 打包的方法了,有興趣的自行百度。

《Python之微信-微信好友頭像合成》

以上就是用 Python 製作微信好友圖片牆的裝逼指南。

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *