使用python下载微信群聊所有群员头像

模块安装

pip install itchat
pip install Pillow

获取微信好友头像

本源码来源于硫酸锌01/流水线,本文提供源码有所改动
运行wxAvatars_1.1_chatrooms.py,输入群名(不需要完整群名包含关键字就行,建议保存群聊到通讯录),扫码登陆微信网页版(如果你的微信登录不了微信网页版,右上角关闭网页,无解

拼接头像

不知道从那扒下的代码了,在源代码的基础上增加了根据头像数开根号取整,拼成一个正方形,而不是所有人头像拼接。

源码

wxAvatars_1.1_chatrooms.py

import os
import sys # non_bmp_map 用到
import itchat
import PIL.Image as Image

# 转载请注明出处
# 原文标题:微信好友头像拼接
# 原文地址:https://github.com/znsoooo/wxAvatars
# 原文作者:硫酸锌01/流水线

non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)

name = input('''
请输入群名
群名可以不是全称
只要搜索到没有歧义就行
''')

name_chatrooms = [name]

user = 'avatars'
num_all = 0
all_friends = []

if not os.path.exists(user):
    os.makedirs(user)

itchat.auto_login(hotReload=True)

def log(text):
    f=open('log.txt','w',encoding = 'utf-8')
    f.write(str(text))
    f.close()

text = '\nfriends:\n\n'
'''
friends = itchat.get_friends()[0:]
num_all = 0
for friend in friends:
    all_friends.append(friend["UserName"])
    ''''''
    #当只是需要输出好友列表而不需要下载头像时可以注释掉此段
    img = itchat.get_head_img(userName=friend["UserName"])
    fileImage = open(user + "/" + str(num_all) + ".jpg",'wb')
    fileImage.write(img)
    fileImage.close()
    ''''''
    text = text + str(num_all) + ".jpg " + friend["NickName"] + '\n'
    num_all += 1
print('friends finished:', len(all_friends))
'''
for name_chatroom in name_chatrooms:
    chatrooms = itchat.search_chatrooms(name_chatroom)
    if chatrooms != []:
        chatroom = chatrooms[0]
        chatroom_id = chatroom['UserName']
        try:
            print('chatroom:', chatroom['NickName'].translate(non_bmp_map))
            text = text + '\nchatroom: ' + chatroom['NickName'] + '\n\n'
        except:
            print('chatroom name error')
        print('MemberCount:', chatroom['MemberCount'])
        memberList = itchat.update_chatroom(chatroom_id, detailedMember=True)
        chatroom = memberList
        num = 0
        print(len(chatroom))
        for member in chatroom['MemberList']:
            if member["UserName"] not in all_friends:
                all_friends.append(member["UserName"])
                ''''''
                #当只是需要输出好友列表而不需要下载头像时可以注释掉此段
                img = itchat.get_head_img(userName=member["UserName"],chatroomUserName=chatroom_id)
                fileImage = open(user + "/" + str(num_all) + ".jpg",'wb')
                try:
                    fileImage.write(img)
                    fileImage.close()
                except:
                    print('img error:', member["UserName"])
                ''''''
                text = text + str(num_all) + ".jpg " + member["NickName"] + '\n'
                num += 1
                num_all += 1
                if num < 10:
                    try:
                        print(num, member["NickName"].translate(non_bmp_map))
                    except:
                        print('nickname error')
            else:
                pass
                # print('duplicate:', member["NickName"].translate(non_bmp_map))
    else:
        print('Not found chatroom:', name_chatroom)
        print('MemberCount:', 0)
print('chatroom finished:', len(all_friends))
log(text)

cut.py

# -*- coding: utf-8 -*-

import math
from PIL import Image
import os

avatar_dir = os.getcwd() + "\\avatars\\"


def joint_avatar(path):
    # 获取文件夹内头像个数
    length = len(os.listdir(path))
    # 设置画布大小
    image_size = 2560
    # 设置每个头像大小
    each_size = math.ceil(2560 / math.floor(math.sqrt(length)))
    # 计算所需各行列的头像数量
    x_lines = int(length ** 0.5)
    y_lines = int(length ** 0.5)
    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 = os.getcwd() + "\\avatars\\"
    joint_avatar(avatar_dir)

附件下载

百度云盘 提取码: anxc


   转载规则


《使用python下载微信群聊所有群员头像》 youyim 采用 知识共享署名 4.0 国际许可协议 进行许可。
 本篇
使用python下载微信群聊所有群员头像 使用python下载微信群聊所有群员头像
模块安装pip install itchat pip install Pillow获取微信好友头像本源码来源于硫酸锌01/流水线,本文提供源码有所改动运行wxAvatars_1.1_chatrooms.py,输入群名(不需要完整群名包含关键
2019-10-01
下一篇 
谷歌浏览器插件推荐 谷歌浏览器插件推荐
InfinityNewTabInfinity New Tab是一款Chrome浏览器实用简洁的插件,它可以完美替代Chrome自身的新标签页、用户也可以进行各式各样的自定义编辑。自定义添加自己喜爱的网站在新标签页里 crxmouse只需一个
2019-09-23
  目录