Python 将 QQ 好友头像生成祝福语的实现代码

本文我们来看一下如何使用 Python 将 QQ 好友头像拼成“五一快乐”四个字。我们可以将整个实现过程分为两步:爬取 QQ 好友头像、利用好友头像生成文字。

爬取头像

爬取 QQ 好友头像我们需要借助于 QQ 邮箱,首先我们从浏览器上登录 QQ 邮箱,之后按 F12 键打开开发者工具并用鼠标选中 Network 选项,如下图所示:

再接着我们按 F5 键刷新一下网页,然后在 Filter 中输入 laddr_lastlist ,如下图所示:

我们再点 Name 下的链接,点击之后右侧会出现一个窗口,我们用鼠标选中 Response 项,如下图所示:

我们最后将 Response 下面出现的内容复制到 txt 文件。

获取了爬取需要用到的东西后我们就可以开始实现爬取了,我们使用 requests 库将头像图片爬取来下存到本地,代码实现如下所示:

# 获取头像
def get_head():
 file = codecs.open('qqfriends.txt', 'rb', 'utf-8')
 s = file.read()
 pattern = re.compile(r'\d+@qq.com')
 # 正则表达式匹配所有的 qq 号
 all_mail = pattern.findall(s)
 # 用于存储需要访问的链接
 all_link = []
 url = 'http://qlogo.store.qq.com/qzone/'
 for mail in all_mail:
 qq = mail.replace('@qq.com', '')
 l = url + qq + '/' + qq + '/100'
 all_link.append(l)
 # 初始化下载图片数量
 i = 0
 # 获取朋友头像数量
 friends_count = len(all_link)
 print('共{}个头像'.format(friends_count))
 # 遍历链接,下载头像
 for link in all_link:
 i += 1
 saveurl = 'head/' + str(i) + '.png'
 print('第 %d 个' % i, end=' ')
 sava2img(link, saveurl)
 return True

# 存储图片函数,picurl 是图片的 URL,saveurl 是本地存储位置
def sava2img(picurl, saveurl):
 try:
 start = time.time()
 response = requests.get(picurl, stream=True)
 # 下载图片到本地
 with open(saveurl, 'wb') as file:
  file.write(response.content)
  print('下载完成...', end=' ')
 end = time.time()
 time_ = end - start
 print('用时: %.2f秒' % (time_))
 return True
 except:
 print('出错了...')

生成文字

现在 QQ 头像图片已经有了,我们再看一下如何用这些图片生成文字,这里需要用到一下第三方库 PIL ,安装使用 pip install Pillow ,我们需要先将 “五一快乐” 四个字转化为汉字库的点阵数据再使用,现在看一下具体实现:

# 将字转化为汉字库的点阵数据
def char2bit(textStr):
 KEYS = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]
 target = []
 global count
 count = 0
 for x in range(len(textStr)):
 text = textStr[x]
 rect_list = [] * 16
 for i in range(16):
  rect_list.append([] * 16)
 gb2312 = text.encode('gb2312')
 hex_str = binascii.b2a_hex(gb2312)
 result = str(hex_str, encoding='utf-8')
 area = eval('0x' + result[:2]) - 0xA0
 index = eval('0x' + result[2:]) - 0xA0
 offset = (94 * (area-1) + (index-1)) * 32
 font_rect = None
 with open("HZK16", "rb") as f:
  f.seek(offset)
  font_rect = f.read(32)
 for k in range(len(font_rect) // 2):
  row_list = rect_list[k]
  for j in range(2):
  for i in range(8):
   asc = font_rect[k * 2 + j]
   flag = asc & KEYS[i]
   row_list.append(flag)
 output = []
 for row in rect_list:
  for i in row:
  if i:
   output.append('1')
   count+=1
  else:
   output.append('0')
 target.append(''.join(output))
 return target

# 生成图片文字
def head2char(workspace,folder,self,outlist):
 # 将工作路径转移至头像文件夹
 os.chdir(folder)
 # 获取文件夹内头像列表
 imgList = os.listdir(folder)
 # 获取头像图片个数
 numImages = len(imgList)
 # 设置头像裁剪后尺寸
 eachSize = 100
 # 变量 n 用于循环遍历头像图片
 n=0
 # 变量 count 用于为最终生成的单字图片编号
 count = 0
 # 初始化颜色列表,用于背景着色
 colorlist = ['#FFFACD','#F0FFFF','#BFEFFF','#b7facd','#ffe7cc','#fbccff','#d1ffb8','#febec0','#E0EEE0']
 # index 用来改变不同字的背景颜色
 index = 0
 # 每个 item 对应不同字的点阵信息
 for item in outlist:
 # 将工作路径转到头像所在文件夹
 os.chdir(folder)
 # 新建一个带有背景色的画布,16 * 16点阵,每个点处填充 2 * 2 张头像图片,故长为 16 * 2 * 100
 canvas = Image.new('RGB', (3200, 3200), colorlist[index]) # 新建一块画布
 # index 变换,用于变换背景颜色
 index = (index+1)%9
 count += 1
 # 每个 16 * 16 点阵中的点,用四张 100 * 100 的头像来填充
 for i in range(16*16):
  # 点阵信息为 1,即代表此处要显示头像来组字
  if item[i] == "1":
  # 循环读取连续的四张头像图片
  x1 = n % len(imgList)
  x2 = (n+1) % len(imgList)
  x3 = (n+2) % len(imgList)
  x4 = (n+3) % len(imgList)
  # 以下四组 try,将读取到的四张头像填充到画板上对应的一个点位置
  # 点阵处左上角图片 1/4
  try:
   # 打开图片
   img = Image.open(imgList[x1])
  except IOError:
   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/4
  try:
   img = Image.open(imgList[x2])
  except IOError:
   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/4
  try:
   img = Image.open(imgList[x3])
  except IOError:
   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/4
  try:
   img = Image.open(imgList[x4])
  except IOError:
   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)
 os.chdir(workspace)
 # 创建文件夹用于存储输出结果
 if not os.path.exists('output'):
  os.mkdir('output')
 os.chdir('output')
 # 存储将拼接后的图片,quality 为图片质量,1 - 100,100 最高
 canvas.save('result%d.jpg'% count, quality=100)

看一下实现效果:

到此这篇关于用 Python 将 QQ 好友头像生成祝福语的文章就介绍到这了,更多相关python qq好友祝福语内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 有趣的Python图片制作之如何用QQ好友头像拼接出里昂

    在本篇博客中,我们将实现两个功能: 将所有头像合并为大图 将所有头像以某个模板合成大图 同样,先给上所有运行效果图: 代码实现 1.代码所需库 import requests,codecs,re,urllib,os,random,math from PIL import Image import numpy as np import cv2 as cv 2.代码讲解 本篇博客就不再讲解如何获取好友头像了,需要的可以参考这篇博文: python爬虫-从QQ邮箱获取好友信息并爬取头像 现在,我们已经

  • Python 将 QQ 好友头像生成祝福语的实现代码

    本文我们来看一下如何使用 Python 将 QQ 好友头像拼成"五一快乐"四个字.我们可以将整个实现过程分为两步:爬取 QQ 好友头像.利用好友头像生成文字. 爬取头像 爬取 QQ 好友头像我们需要借助于 QQ 邮箱,首先我们从浏览器上登录 QQ 邮箱,之后按 F12 键打开开发者工具并用鼠标选中 Network 选项,如下图所示: 再接着我们按 F5 键刷新一下网页,然后在 Filter 中输入 laddr_lastlist ,如下图所示: 我们再点 Name 下的链接,点击之后右侧

  • python实现QQ定时发送新年祝福信息

    目录 前言 第一步 配置go-cqhttp 第二步 获取好友列表 第三步 发送祝福! 总结 前言 今晚就是新年夜啦,为了 刷一波存在感 送出我的祝福,同时让它看起来不像群发消息,我们简单地用三步来实现定制QQ祝福~(保姆级教学  真的很详细) 效果图: 第一步 配置go-cqhttp 简单来说,go-cqhttp就是自己搭建的一个QQ,它可以完成收发消息等功能,并实现操作的自动化 官网地址:go-cqhttp 帮助中心 https://docs.go-cqhttp.org/ 下载界面: 我们根据

  • 基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)

    一.应用场景 鼠标hover弹出div,并且鼠标离开后不能马上隐藏,因为这个div上还有功能入口.比如: 鼠标经过好友列表中的好友头像时显示资料卡的效果如下所示: hover时显示二维码 二.实现 用如下这样一个简单的效果:鼠标hover到A上显示B来模拟 有2种实现方式,推荐第二种,第一种有弊端下面会说. 1.方法一 原理:把触发元素A和要显示元素B放于同一个父级元素内,鼠标经过父级元素时触发显示B.这样鼠标移动到B时仍然 处于该父级元素内,则div不会隐藏. 代码: <!DOCTYPE ht

  • Python拼接微信好友头像大图的实现方法

    基于 itchat 库来获取微信好友头像并执行拼接操作,对微信上文字化好友列表数据进行可视化展示. 获取好友头像 def save_avatar(folder): """ 保存微信好友头像 :param folder: 保存的文件夹 """ itchat.auto_login(hotReload=True) users = itchat.get_friends() or [] print('%d friends found.' % len(use

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

    引言 前段时间,微信朋友圈开始出现了一种晒照片新形式,微信好友墙,即在一张大图片中展示出自己的所有微信好友的头像. 效果如下图,出于隐私考虑,这里作了模糊处理. 是不是很炫,而且这还是独一无二的,毕竟每个人的微信好友是不一样的.本文就教大家用Python来实现这种效果. 环境 操作系统:Windows Python版本:3.7.3 代码实现 我们需要首先需要获取好友的头像信息,接下来处理图像并完成图像的拼接. 准备工作 在这里,我们登录微信获取好友信息,使用的是 wxpy 模块:处理并生成最终的

  • 利用Python爬取微博数据生成词云图片实例代码

    前言 在很早之前写过一篇怎么利用微博数据制作词云图片出来,之前的写得不完整,而且只能使用自己的数据,现在重新整理了一下,任何的微博数据都可以制作出来,一年一度的虐汪节,是继续蹲在角落默默吃狗粮还是主动出击告别单身汪加入散狗粮的行列就看你啦,七夕送什么才有心意,程序猿可以试试用一种特别的方式来表达你对女神的心意.有一个创意是把她过往发的微博整理后用词云展示出来.本文教你怎么用Python快速创建出有心意词云,即使是Python小白也能分分钟做出来.下面话不多说了,来一起看看详细的介绍吧. 准备工作

  • 基于JavaScript实现除夕烟花秀与随机祝福语

    目录 项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后的界面 代码实现 HTML代码 CSS代码 javaScript代码 项目截图 进入后的界面 点击按钮 点击之后的动画 烟花结束后的界面 代码实现 涉及的技术:HTML5多媒体,CSS定位,动画,js面向对象,Jquery动画.事件 HTML代码 <!DOCTYPE html> <html lang="cn"> <head> <meta charset="UTF-8&q

  • Android UI仿QQ好友列表分组悬浮效果

    本文实例为大家分享了Android UI仿QQ好友列表分组悬浮效果的具体代码,供大家参考,具体内容如下 楼主是在平板上測试的.图片略微有点大,大家看看效果就好 接下来贴源代码: PinnedHeaderExpandableListView.java 要注意的是 在 onGroupClick方法中parent.setSelectedGroup(groupPosition)这句代码的作用是点击分组置顶, 我这边不须要这个效果.QQ也没实用到,所以给凝视了.大家假设须要能够解开凝视 package c

  • 使用python itchat包爬取微信好友头像形成矩形头像集的方法

    初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 import itchat import os import PIL.Image as Image from os import listdir import math import sys print("请输入查询模式:0-显示所有好友头像,但最终矩形头像集最后一行可能残缺:1-头像集为完整矩形,但好友可能不全,即在0模式下舍弃

随机推荐