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

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

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

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

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

素材准备

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

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

图片叠加

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

from PIL import Image, ImageDraw, ImageFont
img = Image.open(".\background.jpg")
jgz = Image.open(".\jgz.jpg")
img.paste(jgz,(73,42))
img.show()

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

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

文字叠加

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

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

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

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

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

问题升华

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

  • 表情包下留白的空间是有限的
  • 中文和英文以及标点符号占据的空间不同
  • 如果文本太长,就需要换行;可是如果行太多,图片就放不下

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

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

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

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

Python自动生产表情包的更多相关文章

  1. python自动重试第三方包retrying

    最近写了一个爬虫,需要连接国外的一个网站,经常出现掉线的情况,自己写了一个自动重连的代码,但感觉不够简洁... 后来就上万能的github,找到了一个第三包,基本能满足我的要求.这个第三方包就是ret ...

  2. Python开发个人专属表情包网站

    “表情包”是一种利用图片来表示感情的一种方式.表情包是在社交软件活跃之后,形成的一种流行文化,表情包流行于互联网上面,基本人人都会发表情. 曾经你是否也有过找不到表情包去应对别人的时候. 今天小编分享 ...

  3. 我用Python一键保存了半佛老师所有的骚气表情包

    本文首发于公众号「Python知识圈」,如需转载,请在公众号联系作者授权. 2019年发现两个有意思而且内容比较硬核的公众号.都是同一个人运营的,我们都叫他半佛老师,现实中的职业是风控,公众号内容涉及 ...

  4. python截取视频制作动态表情包+文字

    1:安装moviepy库 2:安装IPython库 代码如下: from moviepy.editor import * from IPython.display import Image def B ...

  5. 第10.10节 Python使用__init__.py自动加载包下内容

    在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件.在<第10.6节 Python包的概念>中介绍了__init__.py文件 ...

  6. Python爬虫入门教程 13-100 斗图啦表情包多线程爬取

    斗图啦表情包多线程爬取-写在前面 今天在CSDN博客,发现好多人写爬虫都在爬取一个叫做斗图啦的网站,里面很多表情包,然后瞅了瞅,各种实现方式都有,今天我给你实现一个多线程版本的.关键技术点 aioht ...

  7. python爬虫---表情包批量采集

    代码: import requests from pyquery import PyQuery as pq # 比xpath还要灵活的html解析工具 # 定义请求 headers = { " ...

  8. python自动安装mysql5.7

    python自动安装mysql5.7 python版本:python2.6 centos版本:centos6.9 mysql版本:mysql5.7.19 安装目录路径和数据目录路径都是固定,当然也可以 ...

  9. Python第八天 模块 包 全局变量和内置变量__name__ Python path

    Python第八天  模块   包   全局变量和内置变量__name__    Python path 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Pyt ...

随机推荐

  1. Hadoop-2.x启动HDFS和YARN的方式

    逐一启动(实际生产环境中的启动方式) * sbin/hadoop-daemon.sh start|stop namenode|datanode|journalnode * sbin/yarn-daem ...

  2. 转载:MAT Memory Analyzer Tool使用示例

    地址:http://blog.csdn.net/yanghongchang_/article/details/7711911 以下是一个会导致java.lang.OutOfMemoryError: J ...

  3. 将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)

    上一节完我们创建了外部网络 ext_net,接下来需要将其连接到 Neutron 的虚拟路由器,这样 instance 才能访问外网. 点击菜单 Project -> Network -> ...

  4. 初探Lambda表达式/Java多核编程【1】从集合到流

    从集合到流 接上一小节初探Lambda表达式/Java多核编程[0]从外部迭代到内部迭代,本小节将着手使用"流"这一概念进行"迭代"操作. 首先何为" ...

  5. java_db常见错误总结

    1.java.sql.SQLSyntaxErrorException: ORA-00911: 无效字符 在拼写seq时是否存在存在特殊字符,如:常见语句后面添加了;2.ORA-01722:无效数字解决 ...

  6. C#操作XML方式

    前言 前一篇XML读取,现在咱们继续XML操作相关 C#中也有三种操作(增.删.改.查)XML文件方法如下: 使用 XmlDocument(DOM模式) 使用 XmlTextWriter(流模式) 使 ...

  7. PL/SQL基本概念

    首先明确PL/SQL主要作用作用: SQL语言适合管理关系型数据库但是它无法满足更复杂的数据处理,所以产生PLSQL.PLSQL用户创建存储过程.函数.触发器.包及用户自定义的函数. 特点: PLSQ ...

  8. 如何用js实现自适应,原来只是几行代码的事(╯‵□′)╯︵┻━┻

    在javascript写下如下几行:   (function (doc, win, undefined) {            var docEl = doc.documentElement,   ...

  9. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

  10. BZOJ USACO 银组 水题集锦

    最近刷银组刷得好欢快,好像都是水题,在这里吧他们都记录一下吧(都是水题大家一定是道道都虐的把= =)几道比较神奇的题到时再列出来单独讲一下吧= =(其实我会说是BZOJ蹦了无聊再来写的么 = =) [ ...