作為一個數(shù)據(jù)分析師戈二,應該信奉一句話——“一圖勝千言”舒裤。不過這里要說的并不是數(shù)據(jù)可視化,而是一款全民向的產品形態(tài)——表情包>蹩浴L诠!!
表情包
不僅僅是一種符號伴鳖,更是一種文化——是促進社交乃至社會發(fā)展的動力之一节值,就像懶。我們堅持認為榜聂,一張優(yōu)秀的表情包搞疗,應該是一幅藝術品,是那忽如一夜春風來的靈感爆發(fā)须肆,是那嘈嘈切切錯雜彈的情思激蕩匿乃,是那直掛云帆濟滄海的壯志豪情,是那一覽天下眾山小的迎風勝利——是不可以容忍碼農用其慣有的形式固定豌汇、流程固定幢炸、毫無美感、毫無藝術的變幻和驚喜的直線思維解構拒贱。然而宛徊,在生產表情包的過程中,如果只是機械地把圖片導進PS——改文字——導出柜思,那也太low了岩调,所以還是把這些很low的機械化的重復動作交給程序來做吧。
之前一直以為圖像的自動處理赡盘,要靠JavaScript腳本控制PS或者AI号枕;后來發(fā)現(xiàn)Python其實也可以做一些簡單的圖像處理,雖然可能比不上MATLAB強大陨享。于是對于圖像處理葱淳,復雜的部分依然在PS或者AI中人工完成,簡單的處理就可以用Python程序完成抛姑。
在開工之前赞厕,先讓我們瞻仰膜拜一下表情包界里程碑式的人物,感謝他們大力推動了表情包在歷史潮流中的顯著進步定硝,他們的英名將長期被人民大眾津津樂道皿桑,他們的音容笑貌將在人們的日常社交中經久不衰,他們的卓越貢獻將永遠鐫刻于表情包史的豐碑上蔬啡!
(如果表情可以收版權費的話诲侮,那就不用辛辛苦苦地去打球、拍戲箱蟆、播音了……)
素材準備
這里我們以網絡上流傳最廣的金館長
表情為中心沟绪,以萌萌噠的熊貓頭作為背景,底下加上文字就能構成一張表情包空猜。
然后用PS處理一下圖片大小绽慈,模板大小設為250*250恨旱,表情裁剪一下白邊。
圖片疊加
第一步工作是把表情疊加到模板上坝疼,注意到我們的表情素材是白底而不是透明搜贤,所以位置要控制好,不然會遮蓋住輪廓裙士。
from PIL import Image, ImageDraw, ImageFont
img = Image.open(r"D:\Python-projects\memes\background.jpg")
jgz = Image.open(r"D:\Python-projects\memes\jgz.jpg")
img.paste(jgz,(73,42))
img.show()
這樣就會看到合成的圖片了:
這張圖片下方還有一截留白入客,那是給我們最后一步添加文字用的。come on腿椎,魔性的笑容已經呈現(xiàn)桌硫,接下來就是最后一擊,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() 是往圖層里輸入文字南用,所以可以不斷執(zhí)行這條命令以在圖片里添加多層文字膀钠。
你還可以導入多張表情,以及多個文本臺詞裹虫,這樣就可以大規(guī)模批量自動生產表情包了……
問題升華
你以為到這里就結束了嗎肿嘲?too young啊筑公!請童鞋們思考這個問題:
- 表情包下留白的空間是有限的
- 中文和英文以及標點符號占據(jù)的空間不同
- 如果文本太長雳窟,圖片放不下,就需要換行匣屡;可是如果行太多封救,圖片也放不下
因此,當你腦中突然閃現(xiàn)出一句既包含中文也有英文還有N多標點符號以增強語氣的臺詞時捣作,怎么設計一個算法誉结,用來尋找合適的字號大小,文本插入位置券躁,文本在哪些地方換行惩坑,使文本能在有限空間居中展示,而且還要滿足一定的觀感呢也拜?
算了旭贬,還是在這里結束吧……
于是,通過這篇嚴肅正經的教程搪泳,我們學會了使用Python進行簡單圖像處理的方法,更get到一項實用的神技:自動生產表情包……
最重要的是扼脐,老夫經常說的“信不信我分分鐘批量做你大堆的表情包”岸军,終于成為現(xiàn)實了……