一键拼接所有微信好友头像


今天给大家介绍一个很有意思的东东,可以一键下载你所有微信好友的头像,重要的是还可以把所有好友的头像拼接成一张大图,类似于照片墙效果,据说把这张大图发朋友圈会有奇效,先来看下效果图吧,考虑到隐私,对图片做了模糊处理。



是不是很有意思,其实实现原理也不难,下面简单介绍下实现思想。


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', (810810), '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的话,可以参考我前面的相关文章。


关键词: python 微信头像

网友留言(0条)

发表评论