最近常常会在群聊中看见这样的老式手机短信的表情包,让我十分感兴趣。 python
我也想作一些这样的图片去逗逗损友,因而我搜了一圈,虽然网上有现成的生成器,可是广告比较多。因而还想本身作一个,顺便练练Image Processing。git
一开始本打算在Web Side搞定的,可是发现我对canvas绘图并不熟悉,最后转向了靠谱的Pillow。github
在网上搜索了一大圈之后,找到了一张比较清晰且干净的原始图片。而后通过PS一番处理,获得一张空白短信图。 canvas
图片中能够清晰地看见手机屏上小小的晶格,那么确定要用像素风格的字体来绘制Text。ide
首先打开原始图片:字体
im = Image.open("images/3.png") # 打开图片
复制代码
随后绘制Rotated Text:spa
text = 'zzkia'
width, height = font.getsize(text)
image2 = Image.new("RGBA", (width, height))
draw2 = ImageDraw.Draw(image2)
draw2.text((0, 0), text=text, font=font, fill=subtitle_color)
image2 = image2.rotate(line_rotate, expand=1)
px, py = subtitle_pos
sx, sy = image2.size
im.paste(image2, (px, py, px + sx, py + sy), image2)
复制代码
咱们发现短信中包含正文以及右上角的字数显示,因而改变字体颜色,再次绘制便可。所用字体颜色为(129, 212, 250, 255)
。code
固然绘制正文的时候要注意换行,不能让文字超出屏幕的边界。我采用的方法是使用Python标准款中的textwrap
。先限定每行max length,把String类型的text文本转换为List,再加入gap属性增长每行文字之间间隙,最后一行行绘制文本。具体如何实现能够在源代码中查看。cdn
由于既有Python Server Side也有Web Side的Serives,因此最后用Docker compose编排一下进行发布,也能提供一个外部的访问。blog
能够访问Github查看源代码: github.com/dcalsky/zzk…
也能够直接进入: zzkia.noddl.me:8020