Pillow生成大鸟转转转梗图

发布于 / 技术 / 0 条评论

应群友需求,近期使用Python3和Pillow制作了一个梗图的生成器,具体生成的产品大概就是这样:

把代码现在记录一下。

首先,搭建一个代码框架。这个框架引入了必须的类还有一些字体编码设置,防止后续过程中出现文本问题等。

make_text为生成文字的主方法,设置了两行文字的内容和输出的文件名。在这里,我们用这篇文章的特色图片作为例子。依照目前程序的设计,最终你的图片会生成到程序运行目录的test.png中。

接下来填充第一段方法,在此先不考虑具体的变色如何实现,只是将文字直接填充到图片上导出。

完成这一步并执行代码后,你会得到一个白色背景的图片,上边写着你设置好的文字。

现在,我们尝试给这个文字添加上初始的渐变色。在这里要得知一个alpha图层的概念,alpha图层代表图片的透明度,用0-255来表示。另外,渐变色的生成,我们可以用(初始颜色-结束颜色)/渐变长度来计算出图片的渐变步进,之后初始颜色-渐变步进*渐变长度获得某一特定像素点的颜色值。所以代码接下来这样改

可以看出,这一步生成的图片有比较明显的图片断层等变化,是因为这一步中运算采用了比较简化的运算方法,会导致在最终一行对渐变色产生偏差。例如,从43换到13,距离为12。此时步进为2.5,运算后会变成2。43-2×12=19,与13相差较大。误差就是这样诞生的。

接下来,对文字开始进行描边。在这里采用的方法是给文字在每个方向移动相应的像素后描绘,产生渐变的效果。缺点是在文字的边角处会产生一些生硬的拐角,另外会导致多次重复描绘,影响程序效率。

执行完这步后,产品会如图所示:

至此,本程序中所有的函数都出现过了,后续的步骤就是慢慢调整图片的样式和描边等步骤。渐变色边框部分的方法基本上和主文字一致,首先生成一张边框的渐变色图片,之后将镂空的文字图片叠加到图层上,再在新的图片上描绘文字,镂空主文字后叠加。即可获得相应的效果。实际上整张图片是三层图片结构。

理解这张图片后再进行编码就不会很困难了。整个程序的全部代码如下

源代码和具体效果图可以点击按钮到github查看。欢迎star!

PS:如果需要透明背景图片的话,可以在保存图片前添加

替换所有颜色值为255,255,255的图片的alpha通道为0,从而实现白色背景透明的效果。

本网站在未特殊说明的情况下采用知识共享署名-非商业性使用-相同方式共享 3.0 协议进行许可。

<-数据丢失->