开发者社区> 雁横> 正文

Python自动生成表情包,python在手,从此斗图无敌手

简介:
+关注继续查看

作为一个数据分析师,应该信奉一句话----"一图胜千言"。不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!!

表情包不仅仅是一种符号,更是一种文化;是促进社交乃至社会发展的动力之一,就像懒。

我们坚持认为,一张优秀的表情包,应该是一幅艺术品,是那忽如一夜春风来的灵感爆发,是那嘈嘈切切错杂弹的情思激荡,是那直挂云帆济沧海的壮志豪情,是那一览天下众山小的荣耀胜利,是不可以容忍码农用其惯有的形式固定、流程固定、毫无美感、毫无艺术的变幻和惊喜的直线思维解构。然而,在生产表情包的过程中,如果只是机械地把图片导进PS --> 改文字--> 导出,那也太low了,所以还是把这些很low的机械化的重复动作交给程序来做吧。

之前一直以为图像的自动处理,要靠JavaScript脚本控制PS或者AI;后来发现Python其实也可以做一些简单的图像处理,虽然可能比不上MATLAB强大。于是对于图像处理,复杂的部分依然在PS或者AI中人工完成,简单的处理就可以用Python程序完成。

在开工之前,先让我们瞻仰膜拜一下表情包界里程碑式的人物,感谢他们大力推动了表情包在历史潮流中的显著进步,他们的英名将长期被人民大众津津乐道,他们的音容笑貌将在人们的日常社交中经久不衰,他们的卓越贡献将永远镌刻于表情包史的丰碑上!

Python自动生成表情包

(如果表情可以收版权费的话,那就不用辛辛苦苦地去打球、拍戏、播音了……)

素材准备

这里我们以网络上流传最广的 金馆长表情为中心,以萌萌哒的熊猫头作为背景,底下加上文字就能构成一张表情包。

Python自动生成表情包

Python自动生成表情包

然后用PS处理一下图片大小,模板大小设为250*250,表情裁剪一下白边。

图片叠加

第一步工作是把表情叠加到模板上,注意到我们的表情素材是白底而不是透明,所以位置要控制好,不然会遮盖住轮廓。

from
 PIL import Image, ImageDraw, ImageFontimg = 
Image.open(".ackground.jpg")jgz = 
Image.open(".jgz.jpg")img.paste(jgz,(73,42))img.show()

这样就会看到合成的图片了:

Python自动生成表情包

这张图片下方还有一截留白,那是给我们最后一步添加文字用的。come on,魔性的笑容已经呈现,接下来就是最后一击,are you OK?! 哦不,are you ready?!

文字叠加

尽管表情包的核心是表情,然而一行简短而又震撼的文字往往能起到直击灵魂的画龙点睛的作用。

draw
 = ImageDraw.Draw(img)ttfront = ImageFont.truetype('simhei.ttf', 
24)draw.text((32, 190),"我的内心毫无波动 甚至还想笑",fill=(0,0,0), 
font=ttfront)img.show()img.save(".Python生成的表情包.jpg")

这样就生成了一张完整的表情包了:

Python自动生成表情包

其中 draw.text()是往图层里输入文字,所以可以不断执行这条命令以在图片里添加多层文字。

你还可以导入多张表情,以及多个文本台词,这样就可以大规模批量自动生产表情包了……

问题升华

你以为到这里就结束了吗?too young啊!请童鞋们思考这个问题:

  • 表情包下留白的空间是有限的

  • 中文和英文以及标点符号占据的空间不同

  • 如果文本太长,就需要换行;可是如果行太多,图片就放不下

因此,当你脑中突然闪现出一句既包含中文也有英文还有N多标点符号以增强语气的台词时,怎么设计一个算法,用来寻找合适的字号大小,文本插入位置,文本在哪些地方换行,使文本能在有限空间居中展示,而且还要满足一定的观感呢?

Python自动生成表情包

算了,还是在这里结束吧……

于是,通过这篇严肃正经的教程,我们学会了使用Python进行简单图像处理的方法,更get到一项实用的神技:自动生产表情包。

最重要的是,老夫经常说的"信不信我分分钟批量做你大堆的表情包",终于成为现实了……

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
argparser Python包使用
argparser Python包使用
17 0
Python 文件上传:如何使用 multipart/form-data 编码和 requests 包
为 Python 标准库没有提供创建 multipart/form-data 编码类型请求的内置方法,这种编码类型允许发送二进制数据和其他表单字段。因此,在 Python 文件上传时,程序必须要么使用第三方库,要么手动构造请求体和头部。其中一个比较简单的方法是使用 requests 包(PyPI 链接),简单快捷的在 Python 3 中使用Requests 包,通过Multipart/Form-Data 编码并上传文件。
33 0
Python基础学习 -- 模块与包
Python基础学习 -- 模块与包
14 0
Python模块和包
Python模块和包
27 0
python和zmq包实现在sever和client之间进行信息传递
python和zmq包实现在sever和client之间进行信息传递
27 0
python计算收益率的效率分析-sympy包-计算呈指数递增,大量计算不考虑
python计算收益率的效率分析-sympy包-计算呈指数递增,大量计算不考虑
28 0
如何在win10上制作一个python包(探索版)
如何在win10上制作一个python包(探索版)
36 0
软件测试|Python基础之包的使用和软件开发目录规范及常用内置模块
软件测试|Python基础之包的使用和软件开发目录规范及常用内置模块
19 0
Python内置包Tkinter的重要控件(下)
本文将接着介绍剩下的五个重要的控件,包括Canvas,Messagebox,Listbox,Checkbutton,Radiobutton。
15 0
Python内置包Tkinter的重要控件(上)
学习了这么久的Tkinter,基本上把Tkinter的重要控件都学了一遍,本文主要对其所有重要控件以及重要函数做一个总结,加深对Tkinter的理解与应用。
19 0
+关注
雁横
分享好玩的编程给大家,提供一种趣味学习的方式
文章
问答
文章排行榜
最热
最新
相关电子书
更多
给运维工程师的Python实战课
立即下载
Python 脚本速查手册
立即下载
ACE 区域技术发展峰会:Flink Python Table API入门及实践
立即下载