首页 > 编程语言 >Python中实现获取所有微信好友的头像并拼接成一张图片

Python中实现获取所有微信好友的头像并拼接成一张图片

时间:2023-03-24 18:02:33浏览次数:44  
标签:Python 微信 头像 拼接 avatar each size dir math


场景

实现扫码登录微信并获取所有好友的昵称以及头像,并将所有头像

拼接成一张图片。

实现

新建文件夹weixinImage

文件夹下新建文件weixinImge.py

# -*- coding: utf-8 -*-
from wxpy import *
import math
from PIL import Image
import os


# 创建头像存放文件夹
def creat_filepath():
    avatar_dir = os.getcwd() + "\\wechat\\"
    if not os.path.exists(avatar_dir):
        os.mkdir(avatar_dir)
    return avatar_dir

# 保存好友头像
def save_avatar(avatar_dir):
    # 初始化机器人,扫码登陆
    bot = Bot()
    friends = bot.friends(update=True)
    num = 0
    for friend in friends:
        friend.get_avatar(avatar_dir + '\\' + str(num) + ".jpg")
        print('好友昵称:%s'%friend.nick_name)
        num = num + 1

# 拼接头像
def joint_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(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 IOError:
                    print("头像读取失败")

    img = image.save(os.getcwd() + "/wechat.png")
    print('微信好友头像拼接完成!')

if __name__ == '__main__':
    avatar_dir = creat_filepath()
    save_avatar(avatar_dir)
    joint_avatar(avatar_dir)

效果

Python中实现获取所有微信好友的头像并拼接成一张图片_python

运行后会出现登录扫码,登录后等待结束。

注意

使用了Python自带的IDLE,无法输出特殊字符。会报错:

UnicodeEncodeError: 'UCS-2' codec can't encode characters in position 8-8: Non-BMP character not supported in Tk

后来改为在Pycharm中运行

Python中实现获取所有微信好友的头像并拼接成一张图片_Image_02

运行结束后

回到文件夹

则在wechat下是所有的好友头像,而wechat.png是拼接成的头像照片。

Python中实现获取所有微信好友的头像并拼接成一张图片_微信_03


标签:Python,微信,头像,拼接,avatar,each,size,dir,math
From: https://blog.51cto.com/BADAOLIUMANGQZ/6147629

相关文章