Python制作微信好友背景墙教程(附完整代码)
作者:上海小胖 发布时间:2022-11-13 08:31:08
目录
引言
环境
代码实现
准备工作
获取并存储好友头像信息
生成微信好友墙
后记
引言
前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像。
效果如下图,出于隐私考虑,这里作了模糊处理。
是不是很炫,而且这还是独一无二的,毕竟每个人的微信好友是不一样的。本文就教大家用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文件夹中,看到保存下来的微信好友头像的图片。
生成微信好友墙
制作微信好友墙,就像以前的大字报,把我们下载的好友头像逐一贴上去即可。
首先设定好微信好友墙的尺寸,使用 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
代码执行后,最终生成的效果图如下:
(这里展示的图片做了模糊处理)
后记
本文中设定照片墙尺寸为650650,而好友头像尺寸为5050,这样最终制作成的照片墙每行有13位好友,共计容纳13*13位好友。
大家可根据自己实际情况,自行调整尺寸参数,以达到最佳效果。大家赶快去生成自己独一无二的照片墙吧~!
好啦,本文所有内容就到这里结束啦。其实后面还可以衍生很多玩法,比如:心行墙、圆墙等。不过逻辑一样,就是代码处理起来会比较麻烦。有兴趣的可以先自己试试,或者等我……
代码已上传至Github
来源:https://www.cnblogs.com/moonhmily/p/11200162.html
猜你喜欢
- 在本章中,我们将详细讨论对称和非对称密码术.对称密码术在此类型中,加密和解密进程使用相同的密钥.它也被称为秘密密钥加密.对称加密的主要特征如
- 一、决策树原理决策树是用样本的属性作为结点,用属性的取值作为分支的树结构。 决策树的根结点是所有样本中信息量最大的属性。树的中间结点是该结点
- 这篇文章主要介绍了python线程定时器Timer实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 从某种程度上说,判断一个网页设计师是否优秀,可以从其在WEB开发(或网页设计)中是否合理的采用各种图片格式得出结论。事实上,或许所有人都知道
- 看到别人用td和table标签模拟的办法: 设置table的上、左padding
- Django View官方文档一个视图函数(类),简称视图,是一个简单的 Python 函数(类),它接受Web请求并且返回Web响应。响应
- bookheader.asp Recommended Books for <%=session(&quo
- 代理的使用场景编写爬虫代码的程序员,永远绕不开就是使用代理,在编码过程中,你会碰到如下情形:网络不好,需要代理;目标站点国内访问不了,需要代
- 在python中有不少对于集合迭代的方法,我们把程序运行后的再一次循环叫做迭代,每一次都循环都可以看做是一次迭代。那么在迭代结束后,我们需要
- 1.首先分析要做的项目的结构,整理出关系图2.运行 python manage.py startapp XXX 创建一个app3.根据关系图
- JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript
- 本文为大家分享了php运行环境搭建安装图文教程,供大家参考,具体内容如下安装apache:1,不要安装到有中文的目录中:2,尽量将apach
- 如下:import pandas as pddf = pd.DataFrame({'Country':['China
- ExpiresAbsolute 属性指定缓存于浏览器中的页的到期日期和时间语法Response.ExpiresAbsolute [
- 实战场景经常有朋友问,学 Python 面向对象时,翻阅别人代码,会发现一个 super() 函数,那这个函数的作用到底是什么?super(
- 0. 学习目标栈和队列是在程序设计中常见的数据类型,从数据结构的角度来讲,栈和队列也是线性表,是操作受限的线性表,它们的基本操作是线性表操作
- 日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过
- 建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。基本思想某类产品的构建由很多复杂组件组成;这些组件中的
- 矩阵相乘需要前面矩阵的行数与后面矩阵的列数相同方可相乘。第一步,先将前面矩阵的每一行分别与后面矩阵的列相乘,作为结果矩阵的行列;第二步算出结
- PyTorch创建自己的数据集图片文件在同一的文件夹下思路是继承 torch.utils.data.Dataset,并重点重写其 __get