我已经将本文完整代码打包成可执行程序了,大家下载后双击即可执行,有需要的可以在公众号【谭小谭】后台回复关键字【微信头像】即可获取软件。
今天给大家介绍一个很有意思的东东,可以一键下载你所有微信好友的头像,重要的是还可以把所有好友的头像拼接成一张大图,类似于照片墙效果,据说把这张大图发朋友圈会有奇效,先来看下效果图吧,考虑到隐私,对图片做了模糊处理。
是不是很有意思,其实实现原理也不难,下面简单介绍下实现思想。
1、下载好友头像
首先这里用到了一个很重要的第三方库 itchat, 这个库很强大,你大概可以理解为微信的一个 api 大集合,即微信正常的添加好友、发聊天消息、加群等等绝大多数微信操作都能通过这个 itchat 这个库来实现,前面我也有介绍过这个库,目前市面上大多数微信机器人都是基于 itchat 库来实现的,那么这个 itchat 又是怎么能有这么牛逼的呢,其实也没有非常的神奇,通俗说就是通过对微信网页版(这里是web网页版,不是pc客户端版)的抓包分析得到了微信的相关 api 接口,通过这些接口能直接和微信服务器对接上,比如调用一个获取微信好友列表的接口,就直接能拿到你微信好友列表的数据了,包括好友昵称、头像、性别等等信息。当然微信已经发现了好多人在滥用相关 api 接口了,所以对新注册的微信账号直接限制了其使用网页版微信登录。
2、拼接好友头像
当我们下载到微信好友头像之后,我们再使用一个 pillow 库来拼接所有的图片即可。pillow 是一个强大的图片处理库,通常被简称为 PIL ,在这里我们先计算出一共有多少张头像图片,然后再计算出每行每列放多少张图片,从而可以得出这张大图的大小,于是可以通过 PIL 创建一个给定大小的空图片,然后再通过循环把所有的头像图片依次粘贴到大图上即可完成拼接,最后在完成拼接后再使用 itchat 将拼接好的大图通过文件助手自动发送到自己微信上。
#-*- coding:utf-8 -*-
import itchat
import math
import os
import PIL.Image as Image
# 开启热登录,短时间内退出,再次进入可以不用扫码登录
itchat.auto_login(hotReload=True)
friends = itchat.get_friends(update=True)
# 下载所有好友的头像图片
num = 0
imgPath = './headImg/'
if not os.path.exists(imgPath):
os.mkdir(imgPath)
for i in friends:
img = itchat.get_head_img(i["UserName"])
with open(imgPath + str(num) + ".jpg", 'wb') as f:
f.write(img)
f.close()
num += 1
length = len(os.listdir(imgPath))
# 根据总面积求每一个的大小
each_size = int(math.sqrt(float(810 * 810) / length))
# 每一行可以放多少个
lines = int(810 / each_size)
# 生成一张空白大图片
image = Image.new('RGBA', (810, 810), 'white')
x = 0
y = 0
#把每张头像依次粘贴到大图上
for i in range(0, length):
try:
img = Image.open(imgPath + str(i) + ".jpg")
except IOError:
print(i)
print("image open error")
else:
img = img.resize((each_size, each_size), Image.ANTIALIAS)
image.paste(img, (x * each_size, y * each_size))
x += 1
if x == lines:
x = 0
y += 1
image.save(imgPath + "myFriends.jpg")
# 通过文件传输助手发送到自己微信中
itchat.send_image(imgPath + "myFriends.jpg", 'filehelper')
image.show()
上面就是完整的源代码,大家可以直接复制到自己电脑上直接运行,如果还不知道怎么安装和运行python的话,可以参考我前面的相关文章。