python图片转换成文字_使用Python脚本将文字转换为图片的实例分享
有时候,我们需要将文本转换为图片,比如发长微博,或者不想让人轻易复制我们的文本内容等时候。目前类似的工具已经有了不少,不过我觉得用得都不是很趁手,于是便自己尝试实现了一个。
在 Python 中,PIL (Python Imaging Library) 是最常用的绘图库,自然地,尝试从 PIL 开始。
使用 PIL 将文字转换为图片
说转换其实并不恰当,真实的过程是:先在内存中生成一张图片,将需要的文字绘制到这个图片上,再将图片保存到指定位置。代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding: utf-8 -*-
import os
import Image, ImageFont, ImageDraw
text= u"这是一段测试文本,test 123。"
im= Image.new("RGB", (300,50), (255,255,255))
dr= ImageDraw.Draw(im)
font= ImageFont.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 时,才会被当作矢量字体处理,也就是说只有当字体 >= 18px 时,文字才能正常显示:
?
1
font= ImageFont.truetype(os.path.join("fonts","simsun.ttc"),18)
效果如下:
增大字体虽然解决了汉字不能正常显示的问题,但还是没有解决我们一开始的初衷:使用点阵字体进行渲染。但是,这个目标使用现阶段的 PIL 似乎有点难以实现了。
使用 pyGame 渲染点阵字体
Python 的第三方模块或组件非常多,可用来绘图的除了 PIL 之外,就还有Pycairo、matplotlib、pyGame 等。在这儿,我使用 pyGame 来完成点阵字体的渲染工作。
代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
import os
import pygame
pygame.init()
text= u"这是一段测试文本,test 123。"
font= pygame.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 生成整张图片。
代码如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
import os
import StringIO
import Image, ImageFont, ImageDraw
import pygame
pygame.init()
text= u"这是一段测试文本,test 123。"
im= Image.new("RGB", (300,50), (255,255,255))
#dr = ImageDraw.Draw(im)
#font = ImageFont.truetype(os.path.join("fonts", "simsun.ttc"), 18)
font= pygame.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.StringIO()
pygame.image.save(rtext, sio)
sio.seek(0)
line= Image.open(sio)
im.paste(line, (10,5))
im.show()
im.save("t.png")
原理很简单,先将文字用 pyGame 渲染为图片,将渲染结果保存在一个 StringIO 对象中,然后再用 PIL 加载它。使用 StringIO 的好处是,一切操作都是在内存中进行的,不需要先将它保存到硬盘再用 PIL 读取,因为硬盘 IO 的效率相对来说是比较低的。
最终效果如下:
到这儿,使用 Python 将文本转为图片的功能就基本实现了,用到了 PIL 和 pyGame。
当然,上面的代码还只解决了最基本的问题,一个真正可用的文本转图片工具,还应该解决以下问题:长文本换行问题、英文单词断字问题、标点符号换行问题等。关于这些问题的分析篇幅也不短,这一次就先略过了。下面是一个综合考虑了诸多因素之后生成的《荷塘月色》的效果图:
python图片转换成文字_使用Python脚本将文字转换为图片的实例分享相关推荐
- python字符串转换成整数_在Python中将字符串转换为整数的方法
在本文中,我们将向你展示如何将Python字符串转换为整数,可在Linux操作平台上进行.Python中的所有数据类型(包括整数和字符串)都是对象,通常在编写Python代码时,你需要将一种数据类型转 ...
- php 将图片转成二进制,php怎么把图片转换成二进制_后端开发
php如何去掉数组的key_后端开发 在PHP中可以使用"array_values"函数去掉数组的key,该函数的作用就是返回包含数组中所有的值的数组,其语法是"arra ...
- opencv把图片转换成二进制_如何增强图像,然后使用Python和OpenCV将其转换为二进制图像?...
我创建了一个简单的例子来说明我要做的事情:#!/usr/bin/python #------------------------------------------------------------ ...
- python文本内容怎么转换成字典_怎么把照片上的文字转换成文本?照片转换文字神器来了...
照片上的文字是不可以直接编辑的,更别提复制粘贴了,有时候确实需要这么文字该怎么办呢?今天小编给大家推荐一个照片转文字神器,那就是闪电OCR图片文字识别软件. 闪电OCR图片文字识别软件是专门用 ...
- python十六进制转换成八进制_怎么把十六进制转化为八进制
展开全部 八进制与十六进制之间的转换32313133353236313431303231363533e4b893e5b19e31333366303831有两种方法: 第一种:他们之间的转换可以先转成二 ...
- python pdf 转换成txt,csv,doc 及doc转换为pdf初级
pdf,搜索相关路径下pdf文档,把pdf文档移动到指定的路径下,再对该路径下的pdf文档进行转换 缺点:无法转换带有图片的pdf文档,转换后的文档格式问题 安装相应的库 1)pip install ...
- 电子表格转换成数据库_创建数据库,将电子表格转换为关系数据库,第1部分...
电子表格转换成数据库 Part 1: Creating an Entity Relational Diagram (ERD) 第1部分:创建实体关系图(ERD) A Relational Databa ...
- html 图片转换成word,在Word中通过把编辑的图片另存为HTML文件实现转换图片
Word是文字处理软件,它和图片格式转换根本就占不上边啊?如何能转换图片呢?在正常情况下Acdsee确实是图片浏览.格式转换的好工具,但是如果你的机器里没有安装它,却要进行图片转换怎么呢?这样我们的W ...
- python unix时间戳转换成时间_关于python:将unix时间戳字符串转换为可读日期
我有一个用python表示unix时间戳(即"1284101485")的字符串,我想把它转换成一个可读的日期.当我使用time.strftime时,我得到一个TypeError: ...
- python 将图片转换成像素画_Python用61行代码实现图片像素化
起因 看到网上的像素图片,感觉蛮有趣的,就打算用python一些PIL类库写一个. 实现思路 把一张图片分成多个块,每个块的颜色都等于这个色块中颜色最多的颜色,如下图. 这个图取2×2的像素为块的大小 ...
最新文章
- 大脑模拟NLP,高德纳奖得主Papadimitriou:神经元集合演算用于句子解析
- Python 循环控制语句-break/continue
- MongoDB自动删除过期数据--TTL索引
- 实时搜索 elasticsearch vs solr
- java基础--网络编程
- python是在linux系统下运行的吗_Linux系统下python代码运行shell命令的方法
- Palindromic Twist(CF-1027A)
- C语言分支语句和循环语句及练习
- Android开发笔记(十六)秋千摇摆动画SwingAnimation
- 响应式web设计之CSS3 Media Queries
- 计算机系统基础知识——校验码之海明码(Hamming Code)
- 【转】Android 9 Pie 兼容性常见问题及注意事项
- 不知为不知--信息论和最大熵原则
- 知识图谱可视化工具选型
- Android实现圆形图片 真菜鸟食用
- YBTOJ反素数洛谷P1463(数论)
- 产品经理必读:敏捷开发中的需求管理过程全解
- android 点击变色的两种情况、textview点击变色以及自定义checkbox
- html大文件传输思路
- Spring源码:Advice接口