Python PIL ImageFont模块详解:字体加载与渲染方法

拾柒
拾柒
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍Python PIL库中ImageFont模块的核心功能,涵盖Bitmap、TrueType及OpenType字体的加载机制。重点解析ImageFont.load、truetype等关键函数的参数用法,包括编码方式设置与路径查找逻辑,并结合Windows系统字体文件示例,展示不同字号与字体的实际应用效果。

ImageFont模块概述与字体格式支持

ImageFont模块定义了一个同名类ImageFont,其实例用于存储位图字体数据,主要服务于ImageDraw模块中的text()绘图方法。

PIL采用专用的字体文件格式来存储位图字体。用户可通过pilfont工具包,将BDF和PCF格式(即Xwindow字体描述格式)转换为PIL支持的格式。

自版本1.1.4起,PIL支持配置是否启用TrueType和OpenType字体(依赖FreeType库支持其他格式)。在更早版本中,仅imToolkit包提供TrueType字体支持。

TrueType字体利用几何学中的二次B样条曲线和直线描述字形轮廓。其优势在于既可用于打印也可用于屏幕显示,且因基于指令描述,具有分辨率无关性,输出始终遵循打印机分辨率,放大缩小均无锯齿。不过,相比PostScript字体,其质量略逊,尤其在文字较小时清晰度不足。

OpenType(又称Type 2字体)由Microsoft和Adobe联合开发,是一种比TrueType更强大的轮廓字体格式。其显著优势包括:可将PostScript字体嵌入TrueType软件中,支持多平台、大字符集及版权保护,被视为Type 1和TrueType的超集。主要优点包括:1)增强跨平台功能;2)更好地支持Unicode定义的国际字符集;3)支持高级印刷控制;4)生成文件尺寸更小;5)支持在字符集中加入数字签名以保障文件集成安全。

OpenType标准规定了文件后缀名:包含TrueType字体的OpenType文件后缀为.ttf,包含PostScript字体的为.OTF。若为包含一系列TrueType字体的字体包文件,则后缀为.TTC。

核心函数详解:Load与Truetype

一、ImageFont模块提供的函数

1、Load函数

定义:ImageFont.load(file) ⇒ Font instance

功能说明:从指定文件加载字体,返回对应的字体对象。若加载失败,将抛出IOError异常。

2、Load_path函数

定义:ImageFont.load_path(file) ⇒ Font instance

功能说明:与load()类似,但若未指定当前路径,系统会从sys.path所列路径中查找指定的字体文件。

3、Truetype函数

定义1:ImageFont.truetype(file,size) ⇒ Font instance

功能说明1:加载TrueType或OpenType字体文件,并创建指定大小的字体对象。该函数从指定文件加载字体,并为指定大小生成字体对象。

在Windows系统中,若指定文件不存在,加载器会自动检查Windows字体目录是否存在该字体。

此函数依赖_imagingft服务支持。

定义2:ImageFont.truetype(file,size, encoding=value) ⇒ Font instance

功能说明2:(自1.1.5版本新增)加载TrueType或OpenType字体文件,并使用指定编码方式创建字体对象。常用编码包括“unic”(Unicode)、“symb”(Microsoft Symbol)、“ADOB”(Adobe Standard)、“ADBE”(Adobe Expert)和“armn”(Apple Roman)。

以下示例演示使用MicrosoftSymbol字体(encoding设为“symb”),在范围oxF000至0xF0FF之间绘制字符。


font = ImageFont.truetype("symbol.ttf", 16, encoding="symb")
draw.text((0, 0), unichr(0xF000 + 0xAA))

4、Load_default函数

定义:ImageFont.load_default() ⇒ Font instance

功能说明:(自1.1.4版本新增)加载系统默认字体。

Font对象方法与渲染控制

二、ImageFont模块提供的方法

Font对象需实现以下方法,供ImageDraw层调用。

1、Getsize方法

定义:font.getsize(text) ⇒ (width, height)

功能说明:返回给定文本的宽度和高度,结果以包含两个元素的元组形式返回。

2、Getmask方法

定义:font.getmask(text,mode=”“) ⇒ Image object

功能说明:为给定文本返回位图。该位图为PIL内部存储内存的实例(由Image.core接口模块定义)。

若字体启用抗锯齿,位图模式为“L”,最大值为255;否则模式为“1”。

(自1.1.5版本新增)可选参数mode用于部分显卡驱动指定偏好模式;若为空,渲染器可能返回任意模式。注意:该模式始终为字符串类型。

Windows系统下的字体应用实例

三、ImageFont模块应用实例


>>> from PIL import Image, ImageDraw, ImageFont
>>> im02 = Image.open("D:\\Code\\Python\\test\\img\\test02.jpg")
>>> draw = ImageDraw.Draw(im02)
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 20)
>>> draw.text((30,30), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'red')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 40)
>>> draw.text((30,100), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'green')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMYOU.TTF", 60)
>>> draw.text((30,200), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'blue')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\SIMLI.TTF", 40)
>>> draw.text((30,300), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'red')
>>> ft = ImageFont.truetype("C:\\WINDOWS\\Fonts\\STXINGKA.TTF", 40)
>>> draw.text((30,400), u"Python图像处理库PIL从入门到精通",font = ft, fill = 'yellow')
>>> im02.show()

在Windows系统中,字体文件通常位于C:\Windows\Fonts文件夹。本实例使用SIMYOU.TTF(幼圆)、SIMLI.TTF(隶书)和STXINGKA.TTF(行楷)。用户可根据需求从该文件夹选择所需字体文件。

字体大小可通过定义字体时的第二个参数进行设定。

本实例生成的图像im02效果如下图所示:

】

至此,关于Python图像处理库PIL中ImageFont模块的使用介绍完毕。如需了解更多PIL ImageFont相关内容,请查阅本站往期文章或继续浏览后续文章,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。