import os
import math
import wxpy # 通过程序操作微信
from PIL import Image
from PIL import ImageFile
class AvatarWall(object):
def __init__(self, dir_name="avatars", img_name="avatar_wall.jpg", img_size=2400):
# 当前路径作为根路径
self.path = os.getcwd()
self.avatar_dir = os.path.join(self.path, dir_name)
# 通过机器人对象获取微信号好友列表
self.bot = wxpy.Bot()
self.friends = self.bot.friends(update=True)
self.image_name = img_name
self.image_size = img_size
# def get_friends(self):
# """获取当前微信号的好友列表"""
# return self.wechat.friends(update=True)
def save_avatars(self):
self.bot.enable_puid(os.path.join(self.path, "wxpy_puid.pkl"))
self.bot.enable_puid()
if not os.path.exists(self.avatar_dir):
os.mkdir(self.avatar_dir)
for friend in self.friends:
try:
name = friend.name
friend.get_avatar(save_path=os.path.join(self.avatar_dir, name+".jpg"))
except FileNotFoundError:
name = friend.puid
friend.get_avatar(save_path=os.path.join(self.avatar_dir, name + ".jpg"))
print("已经存储好友{}的头像".format(name))
print("您共有{}位微信好友, 头像已经全部存储到{}路径下".format(len(self.friends), self.avatar_dir))
def generate_avatar_wall(self):
ImageFile.LOAD_TRUNCATED_IMAGES = True
# x, y方向上照片的个数, 要是多出一行可以手动减一
x_count = y_count = math.ceil(math.sqrt(len(self.friends)))
item_size = math.floor(self.image_size/math.floor(math.sqrt(len(self.friends))))
# 只接受int 类型的size
avatar_image = Image.new("RGB", (x_count*item_size, y_count*item_size))
avatars = os.listdir(self.avatar_dir)
x = y = 0
for avatar in avatars:
avatar_path = os.path.join(self.avatar_dir, avatar)
try:
item = Image.open(avatar_path)
except IOError:
continue
else:
item = item.resize((item_size, item_size))
avatar_image.paste(item, (x*item_size, y*item_size))
x += 1
# 进入下一行
if x == x_count:
x = 0
y += 1
avatar_image.save(os.path.join(self.path, self.image_name))
print("好友头像墙已生成, 存储在{}目录下,快去看看吧".format(self.path))
if __name__ == '__main__':
aw = AvatarWall()
aw.save_avatars()
aw.generate_avatar_wall()
# 退出微信网页端
aw.bot.logout()


温柔-的-女汉子
- 粉丝: 1154
最新资源
- MATLAB环境下电动汽车续航里程影响因素分析与优化策略研究
- 基于 YOLOV3 算法的目标检测实现方案
- 西门子Smart系列水处理系统:反渗透+精混床除盐水工艺的自动化控制案例
- 基于JSP+Servlet实现的污水处理系统+源码(毕业设计&课程设计&项目开发)
- FPGA实现MIL-STD-1553B协议的BC、BM、RT源码解析及应用 实时通信
- 单周期控制的无桥CukPFC变换器:实现高频率(100k)的稳定电源转换
- Abaqus模拟中水力裂缝与天然裂缝相交的cohesive行为
- 电力电子MATLABSimulink仿真:三相PWM整流器及其多种控制方法的研究
- 基于ASP.NET MVC与SQL Server的C#图书及借阅管理系统的设计与实现 - Entity Framework 高级版
- 目标检测-YOLOV3实现
- 结构光3D测量技术:单双目编码解码与标定重建的应用实现
- 电力电子领域Buck双闭环控制降压电路PI调节器的设计与建模及其应用 Simulink v2.5
- 基于51单片机的测速码表仿真:Keil程序源码与Proteus仿真文件解析
- 基于C++ OpenCV 和 Qt 实现人脸(刷脸)登录+源码+项目文档+数据集(毕业设计&课程设计&项目开发)
- FPGA IP源码解密技术:从加密IP文件恢复Verilog与VHDL源代码的方法与挑战
- 基于CSI的WiFi室内被动式目标检测技术
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


