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”相关推荐

  1. [533]python获取微信好友头像生成点阵图片

    首先是点阵字的概念:点阵字体是把每一个字符都分成 n * n 个点,然后用每个点的虚实来表示字符的轮廓.点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示. 汉字那么多,总不能每个字都去自己设 ...

  2. python获取微信好友头像,制作头像照片墙集合!

    登录微信: itchat.auto_login(hotReload=True) 获取好友头像: friends = itchat.get_friends(update=True) for friend ...

  3. 用python做头像_如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  4. 用python把微信好友头像拼成一张图

    首先需要用到三个库: wxpy库(用于获取好友头像然后下载). pillow库(用于拼接头像). pyinstaller库(用于打包python程序成exe文件) 这里我说一下创建虚拟环境的步骤: 我 ...

  5. python表白代码照片墙-如何利用python制作微信好友头像照片墙?

    这个不难,主要用到itchat和pillow这2个库,其中itchat用于获取微信好友头像照片,pillow用于拼接头像生成一个照片墙,下面我简单介绍一下实现过程,代码量不多,也很好理解,实验环境wi ...

  6. Python 制作微信好友头像图片墙

    代码涉及到的外部库: 1.wxpy,用于获取好友头像和下载头像 2.pillow,用于拼接头像 完整代码如下: # -*- coding: UTF-8 -*- from wxpy import * i ...

  7. Python爬微信好友头像,性别,所在地区

    Python爬微信好友头像,性别,所在地区 本文适合新手(有一定基础的小白) 今天没事,用的网页版微信,于是看源码心理作怪,F12打开,研究了一下,结果发现 /斜眼笑/斜眼笑/斜眼笑 再加上,没事干, ...

  8. 基于itchat获取微信好友头像

    itchat貌似又解封了.. 关于微信好友这块就到此结束吧,也没啥新意了-- 上代码: #!/usr/bin/env python # -*- coding:utf-8 -*- import itch ...

  9. python生成微信好友头像心形照片墙

    使用itchat库,实现微信的登录和好友信息的获取,将获取的好友头像进行拼接生成照片墙,拼接时加限制条件生成心形照片墙, 获取好友个性签名生成词云. 涉及: 1. itchat的简单使用 2. 图像拼 ...

最新文章

  1. Android Studio – Cannot resolve symbol ‘R’
  2. 自动驾驶出行,进入下半场
  3. 【PAT乙级】1067 试密码 (20 分)
  4. CentOS7 2.新项目上线脚本
  5. Linux版本的安装文件jdk,tomcat
  6. Linux下修改mysql密码以及忘记密码重置
  7. 全文匹配方式查询(sql)
  8. 继续领先~ Apipost 推出 Websocket 测试功能
  9. 软件测试电脑内存适配,利用Memtest86 测试你电脑的内存
  10. 5V升压8.4V,5V升压7.4V电路图的充电芯片
  11. 路由器自适应算法OSPF和RIP协议(通俗理解)
  12. win7 管理iphone日历_iPhone和Windows同步文件,这7个技巧让你的效率成倍增加
  13. 415错误及解决方法
  14. CSS选择器(随笔)
  15. Oracle官网下载JDK8需要注册怎么办
  16. [工具]Snipaste 屏幕截图软件超级利器 - 花3年精心打造的极致截图贴图/编辑/标注工具
  17. 2. ubuntu快捷键:切换输入法中英文
  18. 简单聊聊常用的ICMP、ARP协议
  19. linux群晖文件路径,如何访问本地网络中 Synology NAS 上的文件 (NFS)
  20. 基于JAVA(Springboot框架)助农商城平台系统设计与实现 毕业设计开题报告

热门文章

  1. kotlin list总结
  2. 百看不如一练, 247 个 Python 实战案例!
  3. 狮子鱼独立版_好多鱼?找不同?瑞典科学家涉嫌学术不端
  4. Unity 2D角色控制器(横板滚轴)
  5. VMware Workstation 17 的安装
  6. printf函数详细解析
  7. 深入理解Surface系统
  8. C#连接数据库的登录界面
  9. vue移动端强制横屏展示
  10. 准确率(Accuracy),精确率/查准率(Precision), 召回率/查全率(Recall)和F1-Measure