一个很皮的实践 Python自动生成表情包

转载 2018年04月16日 00:00:00


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

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

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

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

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

素材准备

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

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

图片叠加

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

  1. from PIL import Image, ImageDraw, ImageFont

  2. img = Image.open(".ackground.jpg")

  3. jgz = Image.open(".jgz.jpg")

  4. img.paste(jgz,(73,42))

  5. img.show()

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

640?wx_fmt=png

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

文字叠加

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

  1. draw = ImageDraw.Draw(img)

  2. ttfront = ImageFont.truetype('simhei.ttf', 24)

  3. draw.text((32, 190),"我的内心毫无波动   甚至还想笑",fill=(0,0,0), font=ttfront)

  4. img.show()

  5. img.save(".Python生成的表情包.jpg")

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

640?wx_fmt=png

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

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

问题升华

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

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

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

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

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

640?wx_fmt=png

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

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

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

∞∞∞



640?wx_fmt=jpeg&wx_lazy=1&wxfrom=5

IT派 - {技术青年圈}持续关注互联网、区块链、人工智能领域640?wx_fmt=jpeg&wx_lazy=1&wxfrom=5



公众号回复“Python”

邀你加入{ IT派Python技术群 } 

一个很皮的实践 Python自动生成表情包

...
  • j2IaYU7Y
  • j2IaYU7Y
  • 2018-04-18 14:28:53
  • 349

新浪所有表情包 新浪表情JSON

[{"order_number":0,"is_hot":false,"category":"","is_common":true,"type":"face","url":"http://img.t.s...
  • dikeboy1234
  • dikeboy1234
  • 2011-11-17 16:05:37
  • 7149

第八届ACM校赛->康娜的表情包

UMR 现在手里有 n 张康纳的表情,最上面一张是玛吉呀巴库乃。现在 UMR 如果每次把最上面的 m 张牌移到最下面而不改变他们的顺序及朝向,那么至少经过多少次移动玛吉呀巴库乃才会又出现在最上面呢? ...
  • jiang_1603
  • jiang_1603
  • 2017-06-05 07:55:27
  • 564

Python爬虫(二)“我想要很多很多的表情包”

Python爬虫之二:“我想要很多很多的表情包” 哈哈hhh,标题写的神神经经的不知所云,其实这是一个关于图片抓取的小运用程序。 一、前期准备         打开百度贴吧中的“表情包吧”-->...
  • qq_22145801
  • qq_22145801
  • 2017-04-07 02:41:29
  • 1128

python 生成表情包

#-*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding("gbk")import os  import p...
  • unikran2018
  • unikran2018
  • 2018-02-27 22:31:34
  • 132

使用python制作自己的表情

  • 2017年12月20日 16:46
  • 77.41MB
  • 下载

Python自动生成表情包

点击上方“程序员大咖”,选择“置顶公众号”关键时刻,第一时间送达!作为一个数据分析师,应该信奉一句话----"一图胜千言"。不过这里要说的并不是数据可视化,而是一款全民向的产品形态----表情包!!!...
  • Px01Ih8
  • Px01Ih8
  • 2018-04-15 00:00:00
  • 73

表情自动生成器java代码实现

前几天在其他网站上看到一个表情自动生成器,自己就试着做了一下,先看下效果。(目前可以处理 臣妾真的做不到啊、妈妈再打我一次、王宝强泰囧三张图片,如想处理其他图片,在类 cn.lulei.util.im...
  • xiaojimanman
  • xiaojimanman
  • 2014-01-20 16:14:39
  • 1849

python使用多线程爬取表情包

使用多线程爬取数据可以显著提高效率 编辑环境:pycharm 目标:爬取表情包库的所有表情包 首先在同目录下建一个images文件夹 代码如下 #coding:ut...
  • xiaobai12123
  • xiaobai12123
  • 2017-11-28 23:01:49
  • 169

Python从入门到实践 习题15-6

15-6 自动生成标签 :请修改die.py和dice_visual.py,将用来设置hist.x_labels 值的列表替换为一个自动生成这种列表的循环。如果你熟悉列表解析,可尝试将 die_vi...
  • yankee0208
  • yankee0208
  • 2017-09-04 15:37:41
  • 559
收藏助手
不良信息举报
您举报文章:一个很皮的实践 Python自动生成表情包
举报原因:
原因补充:

(最多只允许输入30个字)