ZZKIA: 诺基亚短信图片生成

3,688

最近经常会在群聊中看见这样的老式手机短信的表情包,让我十分感兴趣。

我也想做一些这样的图片去逗逗损友,于是我搜了一圈,虽然网上有现成的生成器,但是广告比较多。于是还想自己做一个,顺便练练Image Processing。

一开始本打算在Web Side搞定的,但是发现我对canvas绘图并不熟悉,最后转向了靠谱的Pillow。

Photoshop处理原始图片

在网上搜索了一大圈以后,找到了一张比较清晰且干净的原始图片。然后经过PS一番处理,得到一张空白短信图。

Origin

寻找像素风Font

图片中可以清晰地看见手机屏上小小的晶格,那么肯定要用像素风格的字体来绘制Text。

Pillow 绘制

首先打开原始图片:

im = Image.open("images/3.png") # 打开图片

随后绘制Rotated Text:

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)

当然绘制正文的时候要注意换行,不能让文字超出屏幕的边界。我采用的方法是使用Python标准款中的textwrap。先限定每行max length,把String类型的text文本转换为List,再加入gap属性增加每行文字之间间隙,最后一行行绘制文本。具体如何实现可以在源代码中查看。

Dockerize

因为既有Python Server Side也有Web Side的Serives,所以最后用Docker compose编排一下进行发布,也能提供一个外部的访问。

Github

可以访问Github查看源代码: github.com/dcalsky/zzk…

也可以直接进入: zzkia.noddl.me:8020

效果展示

demo