Python转字符,python图片转字符画

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: