Python制作微信好友背景墙教程(附完整代码)


Posted in Python onJuly 17, 2019

引言

前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像。

效果如下图,出于隐私考虑,这里作了模糊处理。

Python制作微信好友背景墙教程(附完整代码)

是不是很炫,而且这还是独一无二的,毕竟每个人的微信好友是不一样的。本文就教大家用Python来实现这种效果。

环境

操作系统:Windows

Python版本:3.7.3

代码实现

我们需要首先需要获取好友的头像信息,接下来处理图像并完成图像的拼接。

准备工作

在这里,我们登录微信获取好友信息,使用的是 wxpy 模块;处理并生成最终的图像借助 PIL 模块。因为都是第三方模块,如环境中没有可以使用 pip 进行安装。另外涉及路径的处理等,我们需要导入 os 模块和 sys 模块。

from wxpy import *
import PIL.Image as Image
import os
import sys

获取并存储好友头像信息

我们要获取微信好友的头像,首先需要登录微信

# 初始化机器人,扫码登陆微信,适用于Windows系统
bot = Bot()

# # Linux系统,执行登陆请调用下面的这句
# bot = Bot(console_qr=2, cache_path="botoo.pkl"

在获取好友头像信息之前,我们得先在本地创建一个目录,用于后续存储好友头像的文件。

# 获取当前路径信息
curr_dir = get_dir(sys.argv[0])
# 如果FriendImgs目录不存在就创建一个
if not os.path.exists(curr_dir + "FriendImgs/"):
 os.mkdir(curr_dir + "FriendImgs/")

接下来就是获取友头像信息,并将其存储在本地创建的目录中。

my_friends = bot.friends(update=True)
# 获取好友头像信息并存储在FriendImgs目录中
n = 0
for friend in my_friends:
 friend.get_avatar(curr_dir + "FriendImgs/" + str(n) + ".jpg")
 n = n + 1

这时你就可以在本地FriendImgs文件夹中,看到保存下来的微信好友头像的图片。

Python制作微信好友背景墙教程(附完整代码)

生成微信好友墙

制作微信好友墙,就像以前的大字报,把我们下载的好友头像逐一贴上去即可。

首先设定好微信好友墙的尺寸,使用 Image.new() 方法。

image = Image.new("RGB", (650, 650))

接下来,我们需要逐个打开微信好友的图片,使用 Image.open() 方法。

img = Image.open(curr_dir + "FriendImgs/" + file_names)

将微信头像图片,重置为50*50像素尺寸的小图,使用 img.resize() 方法。

img = img.resize((50, 50), Image.ANTIALIAS)

然后将图片黏贴到我们的照片墙中,使用 image.paste() 方法。

image.paste(img, (x * 50, y * 50))

最后将制作完成的照片墙保存下来,使用 image.save() 方法。

img = image.save(curr_dir + "WeChat_Friends.jpg")

现在我们将本小节中代码整合到一起,如下所示:

# 准备生成微信好友头像墙的尺寸
image = Image.new("RGB", (650, 650))

# 定义初始图片的位置
x = 0
y = 0

# 获取下载的头像文件
curr_dir = get_dir(sys.argv[0])
ls = os.listdir(curr_dir + 'FriendImgs')

# 遍历文件夹的图片
for file_names in ls:
 try:
  # 依次打开图片
  img = Image.open(curr_dir + "FriendImgs/" + file_names)
 except IOError:
  continue
 else:
  # 重新设置图片的大小
  img = img.resize((50, 50), Image.ANTIALIAS)
  # 将图片粘贴到最终的照片墙上
  image.paste(img, (x * 50, y * 50))
  # 设置每一行排13个图像
  x += 1
  if x == 13:
   x = 0
   y += 1
# 保存图片为WeChat_Friends.jpg
img = image.save(curr_dir + "WeChat_Friends.jpg

代码执行后,最终生成的效果图如下:

Python制作微信好友背景墙教程(附完整代码)

(这里展示的图片做了模糊处理)

后记

本文中设定照片墙尺寸为650650,而好友头像尺寸为5050,这样最终制作成的照片墙每行有13位好友,共计容纳13*13位好友。

大家可根据自己实际情况,自行调整尺寸参数,以达到最佳效果。大家赶快去生成自己独一无二的照片墙吧~!

好啦,本文所有内容就到这里结束啦。其实后面还可以衍生很多玩法,比如:心行墙、圆墙等。不过逻辑一样,就是代码处理起来会比较麻烦。有兴趣的可以先自己试试,或者等我……

代码已上传至Github

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中处理字符串之isalpha()方法的使用
May 18 Python
python提取字典key列表的方法
Jul 11 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
Jun 21 Python
解决pycharm界面不能显示中文的问题
May 23 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
python 抓取知乎指定回答下视频的方法
Jul 09 Python
Python requests接口测试实现代码
Sep 08 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
python代码编写计算器小程序
Mar 30 #Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 #Python
Python Django的安装配置教程图文详解
Jul 17 #Python
python按键按住不放持续响应的实例代码
Jul 17 #Python
python数据预处理之数据标准化的几种处理方式
Jul 17 #Python
解决Python正则表达式匹配反斜杠''\''问题
Jul 17 #Python
python小程序实现刷票功能详解
Jul 17 #Python
You might like
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
实用函数7
2007/11/08 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
对象特征检测法判断浏览器对javascript对象的支持
2009/07/25 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
Extjs4中tree的拖拽功能(可以两棵树之间拖拽) 简单实例
2013/12/08 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
JavaScript遍历查找数组中最大值与最小值的方法示例
2019/05/24 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
便捷提取python导入包的属性方法
2018/10/15 Python
python实现矩阵打印
2019/03/02 Python
python3发送邮件需要经过代理服务器的示例代码
2019/07/25 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
多个版本的python共存时使用pip的正确做法
2020/10/26 Python
Bibloo罗马尼亚网站:女装、男装、童装及鞋子和配饰
2019/07/20 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
党课培训主持词
2014/04/01 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
听证会主持词
2015/07/03 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
SQL 聚合、分组和排序
2021/11/11 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL
浅谈Python中对象是如何被调用的
2022/04/06 Python