Python3 彩色图片转字符图
实现的最终效果
我们想要实现的一种如下所示的效果:
输入的原图
输出的效果图(由字符构成的图)
我们来看看如何通过Python的PIL库来实现。
具体实现代码
1 | from PIL import Image, ImageDraw, ImageFont |
相关库
Python的Image库:Pillow
可以链接查看其各个模块的详细使用文档,该程序使用的主要是以下几个方法Image.open
,Image.convert
,Image.resize
,Image.new
,ImageDraw.Draw
,image.save
。
代码解读
首先通过Image.open
读原图,并通过Image.convert
将其转换为RGB模式。convert函数支持的具体模式列表可参考官方文档。
官方文档中对于L模式(8-bit pixels, black and white)与RGB模式的转换公式如下:
1 | L = R * 299/1000 + G * 587/1000 + B * 114/1000 |
所以,如果我们不采用sRGB也可以尝试一下通过这种方式来将RGB转换为亮度,即上文代码中的get_char
函数中的gray
的计算方式。
获取图片后,紧接着获取图片的宽高,并根据scale
值计算处理后图的宽高,并原图按照处理后的宽高进行缩放,即resize
,第二个参数为缩放过程的取样方式,Image.NEAREST
即取距离最近的像素而忽略其他的输入像素,其他可取的值还有Image.BOX
等等,具体可以参考文档。
然后通过txts
存储像素转换之后的字符,colors
存储像素转换后的颜色。
最终,通过ImageDraw逐个字符的写入并保存。