你还在为撩不到妹而烦恼吗?
是你不够帅吗?
还是不够幽默?
不,是因为你没有关注我!

关注学一波骚操作,学完撩妹,妹子都排到火车站了。

今天要给大家分享一手操作是教你如何用微信好友的头像拼成想要的文字。

我给这个项目取了一个好听的名字叫“整个朋友圈都是爱你的样子!”

不多bb,我们先看一下效果图。
当然我们的效果图不会像下面这张图所说那样子。

当然值得一提的是,这里提供思路和代码,同时还有很大的发展空间可以让这个项目更加的有魅力。

效果图


bb两句上面的到底是啥东西。
上面的三个大字“爱你哦”,是用我的500好友的头拼接而成的,是不是很血腥!
不,是我朋友圈的所有好友的头像,拼接而成的,这不就是“整个朋友圈都是爱你的样子!”

这13装的,我给你满分,多一分都不行。

OK,客套话结束了,接下来就是展示真功夫的时候。
直接上项目:https://github.com/pengfexue2/pic2char
稍微介绍一下,项目的主要内容:

代码说明: wx2char.py用来扫码登录微信,获取微信好友头像存储到本地,将头像图片拼接成inpt = "二零一九新年快乐!"中的文本内容。 1.需要先安装PIL和itchat库 2.运行代码时需要扫码登录微信网页版 3.目前点阵库是依靠汉字库实现的,即文件夹中的HZK16文件,输入文本时要求是汉字和中文标点,否则可能导致报错 4.若出现“有1位朋友的头像读取失败,已使用本人头像替代”字样,是正常现象,因为有的微信好友头像格式问题获取不到

pic2char.py是假设你想用别的图片来组成文字图片,无需获取微信头像,直接输入汉字用图片来拼接展示 1.需要PIL库 2.需要HZK16文件来获取汉字点阵信息 3.运行代码前,要将图片文件夹放到代码文件夹中,将代码中的user="TED"改为文件夹名称,同时准备一张备用图片将路径赋值给self用作读取图片失败时备选替代

使用说明: 拿到代码后,可以选择修改wx2char.py中要输出的文本内容,保存后直接运行,会跳出二维码图片,扫码登录微信网页版,生成微信好友头像的文件夹(例如:TED文件夹),本人的微信头像(TED.jpg),和最终结果图片的文件夹(TED_output)

因为如果好友数目太多会导致读取微信头像耗时较长,所以准备了pic2char.py用来玩把图片转成汉字的功能,提前准备好图片文件夹和一张备用图片,在代码中对应修改好即可运行

握草。这么能BB的吗?
Talk is cheap. Show me the code

那么我们 直接开始实战操作的讲解吧

(1)wx2char.py用来扫码登录微信,获取微信好友头像存储到本地,将头像图片拼接成inpt = "爱你哦!"中的文本内容。

import binascii
import os
from PIL import Image
import itchatdef char2bit(textStr):KEYS = [0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01]target = []global countcount = 0for x in range(len(textStr)):text = textStr[x]rect_list = [] * 16for 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]) - 0xA0index = eval('0x' + result[2:]) - 0xA0offset = (94 * (area-1) + (index-1)) * 32font_rect = Nonewith 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#print('0', end=' ')else:output.append('0')#print('.', end=' ')#print()target.append(''.join(output))return targetdef getHeadImgs():#通过二维码登录微信网页版itchat.auto_login()#获取微信好友信息列表friendList = itchat.get_friends(update=True)#这里会用到的微信好友信息如下: User= {'UserName': '@8238e922e8be7356b1750c306cb75768','PYQuanPin': 'TED','NickName': 'TED'}#获取用户个人昵称,用于之后文件夹命名、用户头像命名if friendList[0]['PYQuanPin']:user = friendList[0]['PYQuanPin']else:user = friendList[0]['NickName']#先读取用户本人头像,存储名为用户名称selfHead = "{}/{}.jpg".format(os.getcwd(),user)with open(selfHead,'wb') as f:head = itchat.get_head_img(friendList[0]['UserName'])f.write(head)#创建文件夹用于存储好友头像if not os.path.exists(user):os.mkdir(user)#工作路径转到新建文件夹中os.chdir(user)#获取新建文件夹路径userspace = os.getcwd()#开始读取好友头像写入新建文件夹中print("开始读取%d位好友头像..."%(len(friendList)-1))for i in range(1,len(friendList)):if i % 100 ==0:print("已读取%d位好友头像,请耐心等待~"%i)try:friendList[i]['head_img'] = itchat.get_head_img(userName=friendList[i]['UserName'])friendList[i]['head_img_name'] = "%s.jpg" % friendList[i]['UserName']except ConnectionError:print('Fail to get %s' % friendList[i]['UserName'])with open(friendList[i]['head_img_name'],'wb') as f:f.write(friendList[i]['head_img'])print("读取好友头像完毕!")#保存头像的文件夹路径和用户本人头像路径返回return user, selfHeaddef head2char(workspace,user,self,outlist):folder = "{}\\{}".format(workspace,user)#将工作路径转移至头像文件夹os.chdir(folder)#获取文件夹内头像列表imgList = os.listdir(folder)#获取头像图片个数numImages = len(imgList)#设置头像裁剪后尺寸eachSize = 100#变量n用于循环遍历头像图片,即当所需图片大于头像总数时,循环使用头像图片n=0#变量count用于为最终生成的单字图片编号count = 0#img = Image.open(self)#初始化颜色列表,用于背景着色:FFFACD黄色 #F0FFFF白  #BFEFFF 蓝  #b7facd青色 #ffe7cc浅橙色  #fbccff浅紫色 #d1ffb8淡绿 #febec0淡红 #E0EEE0灰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#如果想要白色背景,将colorlist[index]改为'#FFFFFF'canvas = Image.new('RGB', (3200, 3200), colorlist[index])  # 新建一块画布#index变换,用于变换背景颜色index = (index+1)%9count += 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/4try: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/4try: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/4try: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/4try: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'.format(user)):os.mkdir('{}_output'.format(user))os.chdir('{}_output'.format(user))#quality代表图片质量,1-100canvas.save('result%d.jpg'% count, quality=100)if __name__=="__main__":#将想转化的字赋给字符串inpt = "生日快乐,事事顺心!"#将字转化为汉字库的点阵数据outlist = char2bit(inpt)#获取当前文件夹路径workspace = os.getcwd()#获取用户本人名称和用户本人头像路径user,self = getHeadImgs()#将头像图片按点阵拼接成单字图片head2char(workspace,user,self,outlist)print("Well done!")

注意修改:主函数中的inpt的汉字内容,同时注意window和linux中的路径中“\”和“/”的不同,进行修改否则会出错(对于pic2char.py也是一样的)
(2)pic2char.py是假设你想用别的图片来组成文字图片,无需获取微信头像,直接输入汉字用图片来拼接展示

使用

这里我使用的是python3.6

在运行代码前,需先安装PIL和itchat库

(1)无好友头像库的情况:

wx2char.py运行后,扫描二维码,即可登录并读取好友,等待片刻即可输出结果

(2)已下载好好友头像库的情况:

修改pic2char.py的路径,然后运行pic2char.py即可

python实现骚操作,表白神技:整个朋友圈都是爱你的样子相关推荐

  1. 25个python专属骚操作

    本文我总结了25个python专属骚操作,实属提高效率/同事吹牛只利器,确定不收藏吗? 一.原地交换 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法 x, y = 10, 20 ...

  2. 【Python】基于 Flask 框架,模拟微信朋友圈的服务端

    [Python]基于 Flask 框架,模拟微信朋友圈的服务端 一.目的:模拟微信朋友圈的服务端,需要满足以下场景: 1.发表内容时带上图片信息,内容包括(具体内容和id,id指定全局唯一标识),客户 ...

  3. python声音识别歌曲_听歌识曲!python这个骚操作可以了解一下!

    音频指纹识别的目的是确定音频的数字"摘要".从而与音频样本进行比对得出它出自哪首歌曲,像现在QQ音乐.网易云音乐等各大音乐软件都有此功能,它根据歌曲的前两到五秒识别音乐歌名.今天我 ...

  4. Python最强装逼神技!微信远程控制电脑,想让你电脑关机就关机!

    今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前电脑的使用者,然后图片会发送到你的微信上.甚至你可以发送命令来远程关闭电脑. ...

  5. python面试文件操作_python基础-三分钟搞定面试官爱问的【文件操作】

    一.使用python读写文本文件 使用Python来读或者写文本需要用到'open'这个关键字,它的作用是打开一个文件并创建一个文件对象. open语法结构: open(file, mode='r', ...

  6. 用 Python 告诉你!最近 24 小时内朋友圈发生了什么

    点击"小詹学Python",选择"置顶公众号" 第一时间获取 Python 技术干货! 本文授权转载自:AirPython 阅读文本大概需要 10 分钟. 1 ...

  7. 校园跑腿小程序--表白墙--仿造微信朋友圈

    目录 效果展示 一.发布页面 1.1.整体页面样式 1.1.1.上传图片或者视频事件 1.1.2.选择用户当前位置 二.仿造微信朋友圈页面 2.1.1.获取用户传入的经纬度并展示 2.1.2.评论用户 ...

  8. Python爬虫实战项目案例——爬取微信朋友圈

    项目实战   Appium爬取微信朋友圈   自动化爬取App数据 基于移动端的自动化测试工具Appium的自动化爬取程序. 步骤 1.JDK - Download JDK,Appium要求用户必须配 ...

  9. python抢红包脚本实例-自动抢红包,点赞朋友圈,python解放你的双手

    引言: 其实这一篇本来不是写这个的,在周一开始想做的时候就想好了标题: <Android与Python的巧妙结合抓取公众号所有历史文章>, 想做爬公号历史文章的应该都了解过,而且文章也越来 ...

最新文章

  1. servlet/filter/listener/interceptor区别与联系
  2. ubuntu15.10安装wireshark
  3. ReentrantLock 的实现原理
  4. 小米暑期实习在线笔试2015-04-25
  5. php 获取每年的节假日,shell获取每年农历节日的日期
  6. pyquery获取不到网页完整源代码_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
  7. codevs 1038 一元三次方程求解 NOIP2001提高组
  8. 推荐系统之GBDT+LR
  9. Fujitsu(富士通)扫描仪——fi-6130z 无感安装设置
  10. 张国立不敢要片酬,吴京带病上阵拍戏,这个大佬不好惹?!
  11. 图片模糊怎么变清晰?用嗨格式图片无损放大器
  12. matlab 表示希腊字母yita,数学罗马符号_常用数学的罗马符号和拉丁符号有什么哪些_淘题吧...
  13. 王二的经济学故事读书笔记
  14. 无人机飞控 ardupilot Copter-4.0.7 库示例
  15. FME实现CAD文件复杂注记
  16. 新款MacBook M2芯片 安装python
  17. 推荐系统中的排序学习
  18. 2022AcWing寒假算法每日一题之2058. 笨拙的手指
  19. [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案
  20. 小程序发送通知-可重复多次发送

热门文章

  1. 【转载】计算机视觉研究方向
  2. 一篇文章说清楚TensorFlow是什么
  3. React之mobx、mobx-react 入门
  4. TPS74512PQWDRVRQ1
  5. 基于5G和MEC的新型智慧工地应用研究
  6. 垃圾ACMer的暑假训练220716
  7. LPF: A Language-Prior Feedback Objective Function for De-biased Visual Question Answering 论文笔记
  8. Qt_UI_vs建工程双击ui文件没有弹出设计界面
  9. 刚入职3个月就想离职,未到试用期6个月,再度找工作的时候HR会非常介意吗?...
  10. 做技术,也有“七年之痒”