因为最近在搞自动化相关的开发,里面有一个需求,就是将一个软件的数据拿到手,并且以图片的形式传给到服务器那边进行ocr处理。也就是说我拿到数据文本还没有达到目的,灵光一闪,想着,要不我把文本转换为图片吧,于是就去搜索相关的解法。然后就有了今天的这篇文章hhh
简介
PIL(python image library)是python的第三方图像处理库。
它的功能很强大,支持很多图像格式包括jpg,png,gif,bmp等。基本操作有读取、保存、剪切、黏贴等等。
PIL库有很多业务:
- 图像归档:适用于创建缩略图、转换图像格式、打印图像等
- 图像展示:顾名思义,支持GUI接口用于图像展示
- 图像处理:图像大小转换,图像旋转,文本转图片等
虽然它很多业务,但是这篇文章只讲运用PIL将文本转换为图片
安装
老规矩咯,用这个库就要装上
# python2.7版本
pip install PIL
# python3.x版本
pip install Pillow
开始食用
想到转换这两个字,固化思想就是觉得把这文本字符串类型转换为图片类型,确实可以这么理解,不过PIL处理的真实过程是:先在内存生成一张图片或取特定的图(这个图片大小,背景颜色,背景是一张图都可以自定义),然后将文本里的文字画到这张图片上,然后保存到特定的地方。
上代码!
# encoding=utf-8
import Image, ImageFont, ImageDraw
text = u'这是一段话'
font = ImageFont.truetype("simhei",15,encoding='utf-8')
img = Image.new("RGBA", (100,50), (255,255,255))
#魔法开始,将图片画出来
draw = ImageDraw.Draw(img)
draw.text((0,0),text,(0,0,0),font=font)
#保存图片
img.save(text.png)
代码解释:
font = ImageFont.truetype("simhei",15,encoding='utf-8')
设置字体样式:
- 参数1:字体样式
- 参数2:字体大小
img = Image.new("RGBA", (100,50), (255,255,255))
设置图片:
- 参数1:RGBA模式
- 参数2:图片大小
- 参数3:图片背景颜色
draw.text((0,0),text,(0,0,0),font=font)
文字转换图片
- 参数1:文字位置(这里的坐标是图片左上角)
- 参数2:要转换的文本
- 参数3:文字颜色,即文本字体在图片中的颜色
避坑
这里有个小坑,第一次处理文本的时候,非中文字体没问题,但是一遇到中文字体,最后得到的结果是乱码,白干了!
一种解释是,在你的主力机上,没有安装这种字体或者不支持这种字体(我是win机,mac我不知道)
简单查看一下自己电脑有哪些字体
字体默认路径:C:\Window\Font
打开win+r,输入cmd,进入这个路劲,用命令把所有字体文件列出来,一目了然,手动打开看文件,总感觉没有那么方便
C:\Windows\Fonts>dir
#结果
fix.fon
fixe.fon
fixg.fon
fixr.fon
fixt.fon
oem.fon
oeme.fon
app950.fon
arial.ttf
arialbd.ttf
......
我文中的这个例子,处理中文是没问题的,不会乱码