17.4.2 绘制文本

ImageDraw 对象还有 text()方法,用于在图像上绘制文本。text()方法有 4 个参
数:xy、text、fill 和 font。
•    xy 参数是两个整数的元组,指定文本区域的左上角。
•    text 参数是想写入的文本字符串。
•    可选参数 fill 是文本的颜色。
•    可选参数 font 是一个 ImageFont 对象,用于设置文本的字体和大小。下一节中更详细地介绍了这个参数。
因为通常很难预先知道一块文本在给定的字体下的大小,所以 ImageDraw 模块也提供了 textsize()方法。它的第一个参数是要测量的文本字符串,第二个参数是可选的 ImageFont  
对象。textsize()方法返回一个两整数元组,表示如果以指定的字体写入图像,文本的宽度和高度。可以利用这个宽度和高度,帮助你精确计算文本放在图像上的位置。
text()的前三个参数非常简单。在用 text()向图像绘制文本之前,让我们来看看可选的第四个参数,即 ImageFont 对象。
text()和 textsize()都接受可选的 ImageFont 对象,作为最后一个参数。要创建这种对象,先执行以下命令:
>>>  from  PIL  import  ImageFont
既然已经导入 Pillow 的ImageFont 模块,就可以调用 ImageFont.truetype()函数,它有两个参数。第一个参数是字符串,表示字体的 TrueType 
文件,这是硬盘上实际的字体文件。TrueType 字体文件具有.TTF 文件扩展名,通常可以在以下文件夹中找到:
•    在 Windows 上:C:\Windows\Fonts。
•    在OS X 上:/Library/Fonts and /System/Library/Fonts。
•    在 Linux 上:/usr/share/fonts/truetype。
实际上并不需要输入这些路径作为 TrueType  字体文件的字符串的一部分,因为
Python 知道自动在这些目录中搜索字体。如果无法找到指定的字体,Python 会显示错误。
ImageFont.truetype()的第二个参数是一个整数,表示字体大小的点数(而不是像素)。请记住,Pillow 创建的 PNG 图像默认是每英寸 72 像素,一点是 1/72 英寸。
在交互式环境中输入以下代码,用你的操作系统中实际的文件夹名称替换
FONT_FOLDER:

>>>  from  PIL  import  Image,  ImageDraw,  ImageFont
>>>  import  os
➊  >>>  im  =  Image.new('RGBA',  (200,  200),  'white')

➋  >>>  draw  =  ImageDraw.Draw(im)
➌  >>>  draw.text((20,  150),  'Hello',  fill='purple')
>>>  fontsFolder  =  'FONT_FOLDER'  #  e.g.  ‘/Library/Fonts’
➍  >>>  arialFont  =  ImageFont.truetype(os.path.join(fontsFolder,  'arial.ttf'),  32)
➎  >>>  draw.text((100,  150),  'Howdy',  fill='gray',  font=arialFont)
>>>  im.save('text.png')

导入 Image、ImageDraw、ImageFont 和 os 后,我们生成一个 Image 对象,是新的 200×200 白色图像➊,并通过这个 Image 
对象得到一个 ImageDraw 对象➋。我们使用 text()在(20, 150)以紫色绘制 Hello➌。在这次 
text()调用中,我们没有传入可选的第四个参数,所以这段文本的字体和大小没有定制。
要设置字体和大小,我们首先将文件夹名称(如/Library/Fonts)保存在 fontsFolder中。然后调用 ImageFont.truetype(),传入我们想要的字体的.TTF 
文件,之后是表示字体大小的整数➍。将 ImageFont.truetype()返回的 Font 对象保存在 arialFont 这样的变量中,然后将该变量传入 
text(),作为最后的关键字参数。➎行的 text()调用绘制了 Howdy,采用灰色、32 点 Arial 字体。
得到的 text.png 文件如图 17-15 所示。

 


图像由像素的集合构成,每个像素具有表示颜色的RGBA 值,可以通过 x 和y


坐标的定位。两种常见的图像格式是 JPEG 和PNG。Pillow 模块可以处理这两种图像格式和其他格式。
当图像被加载为 Image 对象时,它的宽度和高度作为两整数元组,保存在 size属性中。Image 数据类型的对象也有一些方法,实现常见的图像处理:crop()、copy()、 
paste()、resize()、rotate()和 transpose()。要将 Image  对象保存为图像文件,就调用 save()方法。

如果希望程序在图像上绘制形状,就使用 ImageDraw 的方法绘制点、线、矩形、椭圆和多边形。该模块也提供了一些方法,用你选择的字体和大小绘制文本。
虽然像 Photoshop  这样高级(且昂贵)的应用程序提供了自动批量处理功能,但你可以用Python 脚本,免费完成许多相同的修改。在前面的章节中,你编写 
Python程序来处理纯文本文件、电子表格、PDF 和其他格式。利用Pillow 模块,你已将编程能力扩展到处理图像!


习题
1.什么是 RGBA 值?
2.如何利用 Pillow 模块得到'CornflowerBlue'的 RGBA 值?
3.什么是矩形元组?
4.哪个函数针对名为 sophie.png 图像文件返回一个 Image 对象?
5.如何得到一个 Image 对象的图像的宽度和高度?
6.调用什么方法会得到一个 100×100 的图像的 Image 对象,但不包括它左下

角的四分之一?
7.对 Image 对象修改后,如何将它保存为图像文件?
8.什么模块包含 Pillow 的形状绘制代码?
9.Image 对象没有绘制方法。哪种对象有?如何获得这种类型的对象?
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值