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

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

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

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

天然不是了,Python 作的,是否是以爲沒有 Python 幹不了的事兒。其實,這種圖很早就有人玩過了,不過下面仍是來講說怎麼作出來,這樣你能夠作一個本身的微信好友圖片牆,拿去朋友圈裝裝逼。code

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

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

幾分鐘後就能夠獲得上面的圖片了。ip

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

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

核心是利用如下兩個庫:pip

  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 製做微信好友圖片牆的裝逼指南。

相關文章
相關標籤/搜索