python获取微信好友头像拼接“2020”
python获取微信好友头像拼接“2020”
- 背景
- 思路
- 源码说明
背景
2019年的最后一天,心想马上就要跨年,大家都在总结和祝福,但是又不想随大流,打开微信,翻看着通讯录,突然很感慨,这么多好友,来之不易。于是突发奇想,能不能把好友们的头像拼成一个2020呢?于是写下了下面的demo,效果还不错。
思路
1.python里有个包itchat,模拟网页登陆微信,同时提供了很多微信的操作接口,包括获取头像等信息。所以利用这个包把微信好友的头像下载到本地。
2.图像拼接,我第一印象想到了PIL的Image有个paste方法可以绘制图片。
3.要想将图片按照固定数字进行拼接。脑海中浮现了很多解决方案,比如白底黑字的图片做底图,将黑色部分替换成图片。实际操作起来图片的像素太多,比较复杂。这里就使用了一个简化的方法,定义了一个list,用“0”,“1”来拼成了一个2020方便定位绘制的位置。
year_2020 = [[[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0]],[[0, 0, 0, 1, 1, 0, 0, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 1, 1, 1, 1, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 0, 0, 1, 1, 0, 0, 0]],[[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[0, 0, 0, 0, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 0, 0, 0, 0, 0],[1, 1, 1, 1, 1, 1, 1, 0],[1, 1, 1, 1, 1, 1, 1, 0]],[[0, 0, 0, 1, 1, 0, 0, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 1, 1, 1, 1, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 0, 0, 1, 1, 0],[0, 1, 1, 1, 1, 1, 1, 0],[0, 0, 1, 1, 1, 1, 0, 0],[0, 0, 0, 1, 1, 0, 0, 0]]]
源码说明
1.微信登陆下载头像信息。这块代码不多说,网上也有很多资料。
def login_wechat():itchat.auto_login(hotReload=True)friends = itchat.get_friends(update=True)[0:]user = friends[0]["UserName"]print(user)os.mkdir(user)num = 0for i in friends:img = itchat.get_head_img(userName=i["UserName"])fileImage = open(user + "/" + str(num) + ".jpg", 'wb')fileImage.write(img)fileImage.close()num += 1return user
2.图片的拼接,由于每个人微信里的好友人数有多有少,为了保证出来的效果,计算了一下每个“1”的位置需要填充几个头像
def make_pci(yearlist,username):r = 8#2020四个数字每个数字的列数num_count = len(yearlist)pics = listdir(username) # listdir(user)numPic = len(pics)if numPic<208:return "好友数量太少,无法生成理想图片"tot_eachcol = math.ceil(numPic / 208)#208是2020四个数字中“1”的数量总和,这里做了向上取整,防止出来的图片会遗漏一些好友的头像print('numPic', numPic)print('tot_eachcol', tot_eachcol)eachsize = int(math.sqrt(float(640 * 640) / numPic))#图片压缩的尺寸# print(eachsize)print('eachsize', eachsize)final_size = (eachsize * tot_eachcol * r) * num_count#生成的图片宽度toImage = Image.new('RGBA', (final_size, eachsize * 12))# eachsize * 12为图片高度,12为每个数字list的行数print("final_size", final_size)try:x = 0y = 0cur_img_index = 0progressbar=0temp = 0for eachnum in yearlist:# 拼接图片# print('eachnum', eachnum)for eachrow in eachnum:# print('eachrow',eachrow)for eachcol in eachrow:for tempnum in range(0, tot_eachcol, 1):# print('eachcol',eachcol)if eachcol == 1:try:# 打开图片img = Image.open(username + "/" + pics[cur_img_index])except IOError:print("Error: 没有找到文件或读取文件失败")# print('pics[cur_img_index]', pics[cur_img_index])if cur_img_index<numPic-2:cur_img_index += 1progressbar+=1else:cur_img_index=random.randint(0,numPic-1)print('%s%%' % str(math.ceil(progressbar / (numPic - 1) * 100)),'-' * int(progressbar / (numPic - 1) * 100))else:try:# 打开图片img = Image.open('blank.jpg')#blank图片为640*640的白色纯色图片,用来占位except IOError:print("Error: 没有找到文件或读取文件失败")img = img.resize((eachsize, eachsize), Image.ANTIALIAS)toImage.paste(img, (x * eachsize, y * eachsize))x += 1x = temp * tot_eachcol * ry += 1temp += 1x = temp * tot_eachcol * ry = 0except IOError:print("Error: ")toImage.save(username + ".png")
最后,在main函数中调用上面的方法即可。得到的图片效果如下,功能写的比较粗糙,也算自娱自乐,各位有好的想法也希望多交流,源码稍后会放到github上。最后祝各位新年快乐。
github终于可以用了,附上链接https://github.com/XJCentry/HappyNewYear2020
python获取微信好友头像拼接“2020”相关推荐
- [533]python获取微信好友头像生成点阵图片
首先是点阵字的概念:点阵字体是把每一个字符都分成 n * n 个点,然后用每个点的虚实来表示字符的轮廓.点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示. 汉字那么多,总不能每个字都去自己设 ...
- python获取微信好友头像,制作头像照片墙集合!
登录微信: itchat.auto_login(hotReload=True) 获取好友头像: friends = itchat.get_friends(update=True) for friend ...
- 用python做头像_如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
- 用python把微信好友头像拼成一张图
首先需要用到三个库: wxpy库(用于获取好友头像然后下载). pillow库(用于拼接头像). pyinstaller库(用于打包python程序成exe文件) 这里我说一下创建虚拟环境的步骤: 我 ...
- python表白代码照片墙-如何利用python制作微信好友头像照片墙?
这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...
- Python 制作微信好友头像图片墙
代码涉及到的外部库: 1.wxpy,用于获取好友头像和下载头像 2.pillow,用于拼接头像 完整代码如下: # -*- coding: UTF-8 -*- from wxpy import * i ...
- Python爬微信好友头像,性别,所在地区
Python爬微信好友头像,性别,所在地区 本文适合新手(有一定基础的小白) 今天没事,用的网页版微信,于是看源码心理作怪,F12打开,研究了一下,结果发现 /斜眼笑/斜眼笑/斜眼笑 再加上,没事干, ...
- 基于itchat获取微信好友头像
itchat貌似又解封了.. 关于微信好友这块就到此结束吧,也没啥新意了-- 上代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import itch ...
- python生成微信好友头像心形照片墙
使用itchat库,实现微信的登录和好友信息的获取,将获取的好友头像进行拼接生成照片墙,拼接时加限制条件生成心形照片墙, 获取好友个性签名生成词云. 涉及: 1. itchat的简单使用 2. 图像拼 ...
最新文章
- Android Studio – Cannot resolve symbol ‘R’
- 自动驾驶出行,进入下半场
- 【PAT乙级】1067 试密码 (20 分)
- CentOS7 2.新项目上线脚本
- Linux版本的安装文件jdk,tomcat
- Linux下修改mysql密码以及忘记密码重置
- 全文匹配方式查询(sql)
- 继续领先~ Apipost 推出 Websocket 测试功能
- 软件测试电脑内存适配,利用Memtest86 测试你电脑的内存
- 5V升压8.4V,5V升压7.4V电路图的充电芯片
- 路由器自适应算法OSPF和RIP协议(通俗理解)
- win7 管理iphone日历_iPhone和Windows同步文件,这7个技巧让你的效率成倍增加
- 415错误及解决方法
- CSS选择器(随笔)
- Oracle官网下载JDK8需要注册怎么办
- [工具]Snipaste 屏幕截图软件超级利器 - 花3年精心打造的极致截图贴图/编辑/标注工具
- 2. ubuntu快捷键:切换输入法中英文
- 简单聊聊常用的ICMP、ARP协议
- linux群晖文件路径,如何访问本地网络中 Synology NAS 上的文件 (NFS)
- 基于JAVA(Springboot框架)助农商城平台系统设计与实现 毕业设计开题报告