用Python一鍵生成微信好友頭像牆

前言

用 python 代碼寫了一個一鍵生成合成微信好友頭像的程序,效果以下:python

不會寫代碼?不要緊!只要你會使用電腦就 ok! 由於除了用代碼方式生成外,還建了一個 .exe 的程序,在電腦點擊運行就完事了 下面分別詳細的給你們講解是如何實現的windows

程序使用教程

1.公衆號後臺回覆 「wx」便可獲取 .exe 程序 微信

20190421163538.png

2.在windows上點擊運行,會彈出一個微信登錄的二維碼,用手機微信掃描,確認登陸。spa

3.登錄成功後,會顯示保存的頭像,最後會在程序運行的目錄生成一張 all.png 的圖片命令行

當看到 "全部的微信頭像已合成,請查閱all.png!" 的時候,你要的頭像牆就在 wxImages 文件夾裏面3d

20190421164723.png

  1. 你能夠把這張圖發到朋友圈,隨便配個文案,隨後就等着大波點贊吧。

代碼教程

代碼其實很簡單,主要是作起來以爲頗有意義,若是你會python基礎,再加上下面的講解,你也能夠的!code

  1. 首先新建一個虛擬環境。爲何要虛擬環境?怎麼建虛擬環境? 我以前的文章有寫,去歷史消息翻翻就能找到

虛擬環境

虛擬環境的名字隨意取,我取的是 「wx」cdn

  1. 在pycharm 中導入剛纔建好的虛擬環境

3.主要用到下面三個庫: wxpy 用來操做微信的,除了獲取頭像,還能給好友發消息,具體可查看官方文檔 pillow <=4.2.1 處理頭像 pyinstaller 將代碼打包成 .exe 程序的 4. 接下來就是寫代碼了對象

微信登錄部分代碼blog

@staticmethod
    def get_image():
        path = os.path.abspath(".")  #當前目錄
        bot = Bot()  # 機器人對象
        friends = bot.friends(update=True)
        dirs = path + "\\wxImages"  # 微信頭像保存的路徑
        if not os.path.exists(dirs):
            os.mkdir("wxImages")

        index = 0
        for friend in friends:
            print(f"正在保存{friend.nick_name}的微信頭像")
            friend.get_avatar(dirs + "\\" + f"{str(index)}.jpg")
            index += 1

        return dirs  # 合成頭像的時候須要用到
複製代碼

合成圖像代碼

 @staticmethod
    def composite_image(dirs):
        images_list = os.listdir(dirs)
        images_list.sort(key=lambda x: int(x[:-4]))  # 根據頭像名稱排序
        length = len(images_list)  # 頭像總數
        image_size = 2560  # 
        # 每一個頭像大小
        each_size = math.ceil(image_size / math.floor(math.sqrt(length)))
        lines = math.ceil(math.sqrt(length))  # 列數
        rows = math.ceil(math.sqrt(length))  # 行數
        image = Image.new('RGB', (each_size * lines, each_size * rows))
        row = 0
        line = 0
        os.chdir(dirs)  # 切換工做目錄
        for file in images_list:  # 遍歷每一個頭像
            try:
                with Image.open(file) as img:
                    img = img.resize((each_size, each_size))
                    image.paste(img, (line * each_size, row * each_size))
                    line += 1
                    if line == lines: # 一行填滿後開始填下一行
                        line = 0
                        row += 1
            except IOError:
                print(f"頭像{file}異常,請查看")
                continue

        img = image.save(os.getcwd() + "/all.png")  # 將合成的頭像保存
        if not img:
            print('全部的微信頭像已合成,請查閱all.png!')
複製代碼

核心代碼完成後,將兩部分合一塊兒再導入須要的包,就完事了 源碼在此

# coding: utf-8
from wxpy import Bot, Chat
import math
import os
from PIL import Image

class WxFriendImage(Chat):
 @staticmethod
    def get_image():
        path = os.path.abspath(".")
        bot = Bot()  # 機器人對象
        friends = bot.friends(update=True)

        dirs = path + "\\wxImages"
        if not os.path.exists(dirs):
            os.mkdir("wxImages")

        index = 0
        for friend in friends:
            print(f"正在保存{friend.nick_name}的微信頭像")
            friend.get_avatar(dirs + "\\" + f"{str(index)}.jpg")
            index += 1

        return dirs

 @staticmethod
    def composite_image(dirs):
        images_list = os.listdir(dirs)
        images_list.sort(key=lambda x: int(x[:-4]))  # 根據頭像名稱排序
        length = len(images_list)  # 頭像總數
        image_size = 2560
        # 每一個頭像大小
        each_size = math.ceil(image_size / math.floor(math.sqrt(length)))
        lines = math.ceil(math.sqrt(length))  # 列數
        rows = math.ceil(math.sqrt(length))  # 行數
        image = Image.new('RGB', (each_size * lines, each_size * rows))
        row = 0
        line = 0
        os.chdir(dirs)
        for file in images_list:
            try:
                with Image.open(file) as img:
                    img = img.resize((each_size, each_size))
                    image.paste(img, (line * each_size, row * each_size))
                    line += 1
                    if line == lines:
                        line = 0
                        row += 1
            except IOError:
                print(f"頭像{file}異常,請查看")
                continue
        img = image.save(os.getcwd() + "/all.png")
        if not img:
            print('全部的微信頭像已合成,請查閱all.png!')
def main():
    dirs = WxFriendImage.get_image()
    WxFriendImage.composite_image(dirs)
if __name__ == '__main__':
    main()
複製代碼

能夠將代碼複製到本身的編譯器裏面運行,效果是同樣的。 至於打包成 .exe的程序就更簡單了 在命令行中運行下面的命令便可

pyinstaller -F F:\wx\wx.py
複製代碼

運行成功後,會在倒數第二行顯示生成程序的路徑 好了,以上就是用python合成微信好友頭像的所有指南了 以爲對你有用,就幫忙點個讚唄...

相關文章
相關標籤/搜索