用Python拼字,实现微信好友头像生成祝福文字,做朋友圈最靓的仔

简介: 利用汉字库HZK16文件来实现,拿到点阵信息后,将背景图片当做16*16点阵,用头像图片和空白来替代点阵中的点。这里为了提高字笔画的丰富性,采用一个点对应4个图片。

前几天是中秋节,结合着微信好友头像和点阵字,搞了个头像拼字的代码,朋友圈九宫格效果如下:

image.png


反响不错

每个字都是16*16的点阵,点阵中每个点由4张微信好友头像图片组成。

image.png

image.png

代码中汉字可以自定义,头像图片也可以是你准备的其他图片。

整体思路:

  • 获取微信好友头像
  • 用头像生成点阵字

获取微信好友头像

   以前我们可以利用开源的微信接口itchat,扫码登录个人微信,读取好友信息中的头像存到本地。但是这个开源方案有个致命缺点那就是需要登录网页微信,可是现在网页微信已经不能登录了。

image.png

   所以我们需要换一个思路,我们可以从Win版的微信入手,通过摸索得到一个好消息Win版微信会在用户目录下缓存微信好友头像信息,我们只需要找到并拷贝这些头像即可。


获取微信好友头像核心代码如下

defget_weixin_HeadImage():
"""    获取windows电脑上微信的好友头像、并拷贝到当前目录下    """username=os.environ['USERNAME']   #获取windows登录用户filepath=r'C:\Users\{}\Documents\WeChat Files'.format(username)
# 用户os.walk函数遍历文件夹,输出所有文件绝对路径fordirpath, dirname, filesinos.walk(filepath):   
filename=f'{dirpath}'# print(f'发现文件夹:{dirpath}')# print(filename)# 判断是否有微信头像的绝对路径if'General\HDHeadImage'infilename:
print('微信头像目录:', filename)
shutil.copytree(filename, './image', dirs_exist_ok=True)    #dirs_exist_ok=True就算文件夹存在也会拷贝# files = os.listdir('./image')# num_jpg = len(files)num_jpg=len(os.listdir('./image'))    #用os.listdir方法获取文件列表print('找到好友头像数量:', num_jpg)
print('拷贝微信好友头像完成')
os.system('pause')  #手动退出提示


自此我们完成了第一步,获取所有微信好友头像。

image.png


用头像生成汉字


首先需要了解一下什么是点阵字  

   点阵字体是把每一个字符都分成16×16或24×24个点,然后用每个点的虚实来表示字符的轮廓。点阵字体也叫位图字体,其中每个字形都以一组二维像素信息表示。


获取汉字点阵信息思路

   利用汉字库HZK16文件来实现。拿到点阵信息后,将背景图片当做16*16点阵,用头像图片和空白来替代点阵中的点。这里为了提高字笔画的丰富性,采用一个点对应4个图片。


HZK16字库

   HZK即汉字库的首字母缩写,HZK16字库是符合GB2312标准的16×16点阵字库,支持的汉字有6763个,每个汉字模型需要16×16一共需要256个点来显示,每个点是二进制位也就是2的256次方数据,即32个字节。


   github上有很多用图片生成点阵字代码,我们拷贝下来简单修改就能用。


核心代码如下


foriinrange(16*16):
#点阵信息为1,即代表此处要显示头像来组字ifitem[i] =="1":
#循环读取连续的四张头像图片x1=n%len(imgList)
x2= (n+1) %len(imgList)
x3= (n+2) %len(imgList)
x4= (n+3) %len(imgList)
#以下四组try,将读取到的四张头像填充到画板上对应的一个点位置#点阵处左上角图片1/4try:
img=Image.open(imgList[x1])  # 打开图片exceptIOError:
print("有1张图片读取失败,已使用备用图像替代")
img=Image.open(self)
finally:
img=img.resize((eachSize, eachSize), Image.ANTIALIAS)  # 缩小图片canvas.paste(img, ((i%16) *2*eachSize, (i//16) *2*eachSize))  # 拼接图片# 点阵处右上角图片2/4try:
img=Image.open(imgList[x2])  # 打开图片exceptIOError:
print("有1张图片读取失败,已使用备用图像替代")
img=Image.open(self)
finally:
img=img.resize((eachSize, eachSize), Image.ANTIALIAS)  # 缩小图片canvas.paste(img, (((i%16) *2+1) *eachSize, (i//16) *2*eachSize))  # 拼接图片# 点阵处左下角图片3/4try:
img=Image.open(imgList[x3])  # 打开图片exceptIOError:
print("有1张图片读取失败,已使用备用图像替代")
img=Image.open(self)
finally:
img=img.resize((eachSize, eachSize), Image.ANTIALIAS)  # 缩小图片canvas.paste(img, ((i%16) *2*eachSize, ((i//16) *2+1 ) *eachSize))  # 拼接图片# 点阵处右下角图片4/4try:
img=Image.open(imgList[x4])  # 打开图片exceptIOError:
print("有1张图片读取失败,已使用备用图像替代")
img=Image.open(self)
finally:
img=img.resize((eachSize, eachSize), Image.ANTIALIAS)  # 缩小图片canvas.paste(img, (((i%16) *2+1) *eachSize, ((i//16) *2+1) *eachSize))  # 拼接图片#调整n以读取后续图片n= (n+4) %len(imgList)


实际效果图

image.png



注意事项:

  • 如果文字太多,图片太少就会出现一张图片重复出现的情况
  • 如果文字太少,图片太多就会出现漏图片的情况


完整代码:

    https://github.com/huaisha1224/Python-Example


    怀沙
    +关注
    目录
    打赏
    0
    0
    0
    0
    50
    分享
    相关文章
    |
    2月前
    |
    自动化微信朋友圈:Python脚本实现自动发布动态
    本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
    220 61
    通过标签清理微信好友:Python自动化脚本解析
    微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
    112 7
    使用python 实现微信签到提醒功能
    【9月更文挑战第4天】使用python 实现微信签到提醒功能
    123 2
    【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
    【微信小程序-原生开发】转发给好友/群,分享到朋友圈(含单页模式访问云开发数据库的方法)
    282 0
    【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
    【微信小程序-原生开发】实用教程17 - 详情页触发列表页刷新,点击图片放大预览,转发给好友/群,分享到朋友圈
    66 0
    微信留言自动回复(Python实现)
    本项目旨在使用Python与Windows GUI自动化工具来自动化微信的操作,作用为读取未读消息、根据关键词回复消息
    323 0
    企业微信SDK接口API调用-触发推送企业微信微信好友
    企业微信SDK接口API调用-触发推送企业微信微信好友
    |
    8月前
    微信小游戏全局开启好友和朋友圈分享功能
    微信小游戏全局开启好友和朋友圈分享功能
    84 0
    企业微信api接口调用-通过手机号或微信好友添加客户
    企业微信api接口调用-通过手机号或微信好友添加客户
    探索Python编程:从基础到高级
    在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!

    热门文章

    最新文章