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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
Python中str.format()详解
Mar 12 Python
对Python中range()函数和list的比较
Apr 19 Python
Python格式化日期时间操作示例
Jun 28 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
Python 类属性与实例属性,类对象与实例对象用法分析
Sep 20 Python
Python sep参数使用方法详解
Feb 12 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
QML用PathView实现轮播图
Jun 03 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
Python中re模块的元字符使用小结
Apr 07 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
mysql4.1以上版本连接时出现Client does not support authentication protocol问题解决办法
2007/03/15 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
php面向对象值单例模式
2016/05/03 PHP
js几个验证函数代码
2010/03/25 Javascript
Javascript 面向对象之重载
2010/05/04 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
谈一谈javascript闭包
2016/01/28 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
vue 自定义提示框(Toast)组件的实现代码
2018/08/17 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
详解javascript replace高级用法
2019/02/17 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[02:46]完美世界DOTA2联赛PWL DAY4集锦
2020/11/03 DOTA
详解Python中的正则表达式的用法
2015/04/09 Python
使用Python编写vim插件的简单示例
2015/04/17 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python实现电脑自动关机
2018/06/20 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
借款民事起诉状范文
2015/05/19 职场文书
民事辩护词范文
2015/05/21 职场文书
医院病假条怎么写
2015/08/17 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
创业计划书之o2o水果店
2019/08/30 职场文书
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript