PIL:文本转换为图片

1,011 阅读3分钟

因为最近在搞自动化相关的开发,里面有一个需求,就是将一个软件的数据拿到手,并且以图片的形式传给到服务器那边进行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
 ......

我文中的这个例子,处理中文是没问题的,不会乱码