专栏首页程序猿声10分钟教你用python下载和拼接微信好友头像图片

10分钟教你用python下载和拼接微信好友头像图片

相信微信大家是用得再多也不过了。那么,对于python+微信,又能玩出什么新的花样呢?下面小编就给大家带来一个好玩的东西。用python下载所有的微信好友的头像,然后拼接成一张大图。这样,大家就可以转载到朋友圈装XY了。哈哈。

还是先给大家看看效果图如何。毕竟无图言X。

效果图:

PS:图侵删。这不是小编的微信哈……

好了废话不多说,看看我们是怎么一步一步做出来的吧。

下载微信好友头像

第一步当然是下载微信好友的头像,然后才能进行拼接。这里我们用到了itchat这个python的库。关于这个库,更多好玩的东西我们在后期会推出的,大家敬请关注and期待就好了。先看代码:

 1itchat.auto_login()
 2for friend in itchat.get_friends(update=True)[0:]:
 3    #可以用此句print查看好友的微信名、备注名
 4    print(friend['NickName']+"("+friend['RemarkName']+")")
 5    img = itchat.get_head_img(userName=friend["UserName"])
 6    path = headImgPath+friend['NickName']+"("+friend['RemarkName']+").jpg"
 7    try:
 8        with open(path,'wb') as f:
 9            f.write(img)
10    except Exception as e:
11        print(repr(e))

代码灰常简单。首先我们调用itchat.auto_login()进行微信登陆。

扫码登陆成功以后,我们再获取好友,然后获取头像,再配置一下文件保存路径,最后把头像写入文件里面。是不是简单到难以置信?

拼接好友头像

拼接我们用了PIL库里面的Image模块。代码看下面:

 1pathList = []
 2# os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。这个列表以字母顺序。 它不包括 '.' 和'..' 即使它在文件夹中。
 3for item in os.listdir(headImgPath):
 4    imgPath = os.path.join(headImgPath, item)
 5    pathList.append(imgPath)
 6
 7total = len(pathList)#total是好友头像图片总数
 8line = int(sqrt(total))#line是拼接图片的行数(即每一行包含的图片数量)
 9NewImage = Image.new('RGB', (128*line,128*line))
10x = y = 0
11for item in pathList:
12    try:
13        img = Image.open(item)
14        # Image.ANTIALIAS:平滑滤波。对所有可以影响输出像素的输入像素进行高质量的重采样滤波,以计算输出像素值。
15        img = img.resize((128,128),Image.ANTIALIAS)
16        NewImage.paste(img, (x * 128 , y * 128))
17        x += 1
18    except IOError:
19        print("第%d行,%d列文件读取失败!IOError:%s" % (y,x,item))
20        x -= 1
21    if x == line:
22        x = 0
23        y += 1
24    if (x+line*y) == line*line:
25        break
26NewImage.save("final.jpg")

我们先是用os.listdir获取了所有头像的路径保存到pathList里面。接着创建一个大图片,将大图片划分为n个小方格,再往小方格里面塞好友头像。需要注意的是,在塞好友头像前,需要对头像进行缩略变小才能塞进去。最后,生成最终文件。在当前目录下即可找到final.jpg。即为我们的成品。大家就可以拿着它去朋友圈装逼了~

本来想弄一个现成的供大家下载使用,不过想想还是算了。大家直接下载python源码运行即可。

本文分享自微信公众号 - 程序猿声(ProgramDream),作者:邓发珩

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 干货 | Python爬虫实战(中):数据可视化-教你做出漂亮的图表

    各位看客老爷们,我又来啦。上一期我们利用Python+百度地图POI抓取了一些高校之间的距离数据,传送门:

    短短的路走走停停
  • 带容量约束的弧路径问题(CARP)简介

    路径问题的研究可以分为两个方向:以点为服务对象的车辆路径问题(VRP)和以弧为服务对象的弧路径问题(ARP)。不同于前者,ARP的基本特征是车队从一个仓库出发,...

    短短的路走走停停
  • 运筹学中的经典动态规划

    应我们大大老板的要求,小小编今天打算给大家带来一些在运筹学中比较基础的动态规划问题,也算在之前的小舟小编的基础上加一些东西吧!

    短短的路走走停停
  • 小数据:理论和架构 | TW洞见

    今日洞见 文章作者及图片来自ThoughtWorks:熊节。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站...

    ThoughtWorks
  • 分类问题中的维度诅咒(下)

    换句话说,如果可用训练数据的数量是固定的,我们继续添加维度的话,则会发生过拟合。另一方面,如果我们不断增加维度,训练数据的数量需要快速增长以保持相同的覆盖,并避...

    哒呵呵
  • BZOJ 2463: [中山市选2009]谁能赢呢?(智商)

    Description 小明和小红经常玩一个博弈游戏。给定一个n×n的棋盘,一个石头被放在棋盘的左上角。他们轮流移动石头。每一回合,选手只能把石头向上,下,左,...

    attack
  • linux系统编程之信号(五):实时信号与sigqueue函数

    一、sigqueue函数 功能:新的发送信号系统调用,主要是针对实时信号提出的支持信号带有参数,与函数sigaction()配合使用。 原型:int sigqu...

    s1mba
  • 【BDTC先睹为快】赖兆红:如何构建低延时大数据系统平台

    2014年12月12-14日,由中国计算机学会(CCF)主办,CCF大数据专家委员会协办,中科院计算所与CSDN共同承办的2014中国大数据技术大会(Big ...

    CSDN技术头条
  • 扩展正则表达式及应用

    第1章 扩展正则表达式 1.1  + 前一个字符连续出现了1次或1次以上 egrep  "0+" oldboy.txt  1次或1次以上 >=1 egrep  ...

    惨绿少年
  • 智能机器人机械手臂原理图

    电源模块原理图 ? 手爪旋转模块原理图 ? 手爪张合模块原理图 ? ? ? ?

    机器人网

扫码关注云+社区

领取腾讯云代金券