如何在Python中获取文本字符串的视觉长度

2023-11-22

如同这个问题,我不是问如何查找字符串中的字符数。我想确定渲染时字符串的视觉长度或将其与另一个字符串进行比较。

例如,“iiii”和“WWWW”都有四个字符。然而,“iiii”在视觉上更短。我知道这是由字体决定的,并且我不使用等宽字体。因此,为了解决这个问题,我将使用 Arial 10pt。

是否有任何内置模块可以提供给定字体的字符串的视觉尺寸?


您可以直接计算宽度,而不是渲染到图像缓冲区并计算像素使用字体规格。似乎没有随核心 python 一起分发的字体 API,但在各种软件包中都有大量第三方字体 API。这是一个相当完整的解决方案对于 Adob​​e 字体规格,使用matplotlib:

>>> from matplotlib import rcParams
>>> import os.path

>>> afm_filename = os.path.join(rcParams['datapath'], 'fonts', 'afm', 'ptmr8a.afm')
>>>
>>> from matplotlib.afm import AFM
>>> afm = AFM(open(afm_filename, "rb"))
>>> afm.string_width_height('What the heck?')
(6220.0, 694)

度量以所使用字体的比例因子(点大小)的 1/1000 为单位报告。 (感谢@JacobLee 挖掘这个信息.)

另一种可能性是tkFont的模块tkinter. 这一页记录函数tkFont.Font.measure("some string"),但似乎你需要一个 Tk 窗口才能使用它;所以我不知道它有多实用:

# Python 3 names -- see Note below
import tkinter 
from tkinter import font as tkFont

tkinter.Frame().destroy()  # Enough to initialize resources
arial36b = tkFont.Font(family='Arial', size=36, weight='bold')
width = arial36b.measure("How wide is this?")
print(width)  # Prints: 404

注意:在 python 2 中(以及在page我上面提到过),tkinter被称为Tkinter, and tkinter.font是一个顶级模块,tkFont:

import Tkinter
import tkFont
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中获取文本字符串的视觉长度 的相关文章

随机推荐