Python转字符,python图片转字符画
使用Python脚本将文本转换为图片,以便共享实例。
来源:中文来源网站浏览:日期:2018年9月2日
[下载文档:使用Python脚本将文字转换成图片,分享示例. txt]
(友情提示:右键单击上行txt文档的名称-目标另存为)
使用Python脚本将文本转换成图片的实例分享有时候,我们需要将文本转换成图片,比如发一条很长的微博,或者我们不希望别人轻易复制我们的文本内容。目前类似的工具有很多,但是我觉得都不是很好用,就自己尝试实现了一个。
在Python中,PIL (Python Imaging Library)是最常用的绘图库。自然,试着从PIL开始。
使用PIL将文本转换成图片。
其实转换并不合适。真实的过程是:先在内存中生成一张图片,在这张图片上画出需要的文字,然后将图片保存到指定位置。代码如下:
# -*-编码:utf-8 -*-
导入操作系统
导入图像,图像字体,图像绘制
这是一个测试文本,测试123。
im=Image.new(RGB ,(300,50),(255,255,255))
dr=ImageDraw。绘制(im)
font=image font . truetype(OS . path . join( fonts , msyh.ttf ),14)
dr.text((10,5),text,font=font,fill=#000000 )
im.show()
im.save(t.png )
生成的图片如下:
杯子发生了,汉字显示不正常!
我在网上搜索了一下,发现这似乎是PIL的一个bug。在当前版本的PIL中,无法正确处理带有非ASCII字符的点阵字体的渲染。像宋体这样的字体,只有当=18px时才会被当作矢量字体,也就是说,只有当font=18px时才能正常显示文字:
font=image font . truetype(OS . path . join( fonts , simsun.ttc ),18)
效果如下:
虽然放大字体解决了汉字无法正常显示的问题,但仍然没有解决我们的初衷:用点阵字体渲染。然而,这个目标似乎有点难以实现与PIL在这个阶段。
使用pyGame渲染点阵字体
Python有很多第三方模块或组件。除了PIL,Pycairo,matplotlib,pyGame等等都可以用来绘图。这里我用pyGame来完成点阵字体的渲染。
代码如下:
# -*-编码:utf-8 -*-
导入操作系统
导入pygame
pygame.init()
这是一个测试文本,测试123。
font=py game . font . font(OS . path . join( fonts , simsun.ttc ),14)
rtext=font.render(text,True,(0,0,0),(255,255,255))
pygame.image.save(rtext, t.jpg )
效果如下:
可以看到,有了pyGame,点阵字体的问题终于解决了。
结合PIL和pyGame
虽然pyGame可以解决点阵字体的渲染问题,但在图像处理方面,PIL更强大。那么,我们为什么不把两者结合起来呢?用pyGame渲染点阵字体,然后用PIL生成整张图片。
代码如下:
# -*-编码:utf-8 -*-
导入操作系统
进口StringIO
导入图像,图像字体,图像绘制
导入pygame
pygame.init()
这是一个测试文本,测试123。
im=Image.new(RGB ,(300,50),(255,255,255))
#dr=ImageDraw。绘制(im)
# font=image font . truetype(OS . path . join( fonts , simsun.ttc ),18)
font=py game . font . font(OS . path . join( fonts , simsun.ttc ),14)
#dr.text((10,5),text,font=font,fill=#000000 )
rtext=font.render(text,True,(0,0,0),(255,255,255))
#pygame.image.save(rtext, t.gif )
sio=StringIO。斯特林乔
pygame.image.save(rtext,sio)
sio.seek(0)
line=Image.open(sio)
im.paste(第(10,5)行)
im.show()
im.save(t.png )
原理很简单。首先,用pyGame将文本渲染成图片,将渲染结果保存在StringIO对象中,然后用PIL加载。使用StringIO的好处是所有的操作都在内存中进行,不需要先存到硬盘再用PIL读取,因为硬盘IO的效率比较低。
最终效果如下:
至此,用Python把文字转换成图片的功能基本实现了,用的是PIL和pyGame。
当然,上面的代码只是解决了最基本的问题。一个真正可用的将文本转换为图片的工具,还应该解决以下问题:长文本换行问题,英文单词断字问题,标点换行问题等。这些问题的分析不短,这次就略过了。下面是综合考虑诸多因素后生成的《荷塘月色》的效果图:
亲爱的,试试微信扫码分享这个页面吧!*^_^*
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。