简介
本实验将通过一个示例,指导你了解如何使用 Python 的 Matplotlib 库使字体表相互关联。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟,以便 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
This tutorial is from open-source community. Access the source code
💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版
本实验将通过一个示例,指导你了解如何使用 Python 的 Matplotlib 库使字体表相互关联。
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟,以便 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
首先,我们需要加载一个字体文件。在这个例子中,我们将使用 DejaVuSans.ttf 字体文件。
import os
import matplotlib
from matplotlib.ft2font import FT2Font
font = FT2Font(os.path.join(matplotlib.get_data_path(), 'fonts/ttf/DejaVuSans.ttf'))
接下来,我们将字符映射表设置为标准的 Unicode 字符映射表。
font.set_charmap(0)
我们将获取字体中的字符编码及其对应的字形,并将它们存储在两个字典 coded
和 glyphd
中。
codes = font.get_charmap().items()
coded = {}
glyphd = {}
for ccode, glyphind in codes:
name = font.get_glyph_name(glyphind)
coded[name] = ccode
glyphd[name] = glyphind
现在我们将从字体中加载一个字形,即字母 'A',并使用 glyph.bbox
属性打印其边界框。
code = coded['A']
glyph = font.load_char(code)
print(glyph.bbox)
我们可以通过使用 font.get_kerning()
方法来获取两个字形之间的字距调整值。在这个例子中,我们将获取字母 'A' 和 'V' 的字形之间以及字母 'A' 和 'T' 的字形之间的字距调整值。
## 'AV' 的字距调整值
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_DEFAULT))
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_UNFITTED))
print('AV', font.get_kerning(glyphd['A'], glyphd['V'], KERNING_UNSCALED))
## 'AT' 的字距调整值
print('AT', font.get_kerning(glyphd['A'], glyphd['T'], KERNING_UNSCALED))
在这个实验中,我们学习了如何加载字体文件、设置字符映射表、获取字符编码和字形、加载一个字形以及获取字形之间的字距调整值。对于任何想在其 Python 项目中处理字体和文本的人来说,这些都是有用的技术。