gpt4 book ai didi

python - 为什么 ImageFont.getsize() 在使用等宽字体时会不一致地测量字符?

转载 作者:行者123 更新时间:2023-12-04 03:43:24 26 4
gpt4 key购买 nike

我正在尝试计算等宽字体(我希望保持一致)中字形的宽度和高度,但是 ImageFont.getsize()给定不同的单字符串返回不同的值:

>>> from PIL import ImageFont
>>> font = ImageFont.truetype("consola.ttf", size=15)
>>> font.getsize(".")
(8, 12)
>>> font.getsize("@")
(9, 15)
ImageFont.getlength() ,另一方面,确实总是为每个字符返回相同的宽度:
>>> font.getlength("@")
8.0
>>> font.getlength(".")
8.0
那么什么是 getsize()测量,以及为什么它与 getlength() 不同?

最佳答案

来自 ImageFont.py文件:
获取长度():

Returns length (in pixels with 1/64 precision) of given text when rendered in font with provided direction, features, and language. This is the amount by which following text should be offset. Text bounding box may extend past the length in some fonts, e.g. when using italics or accents. The result is returned as a float; it is a whole number if using basic layout.


获取大小():

Returns width and height (in pixels) of given text if rendered in font with provided direction, features, and language.


该文件将差异解释为:

Use :py:meth:getlength() to measure the offset of following text with 1/64 pixel precision.


我从中了解到的是 getlength()返回当前文本和下一个文本之间的偏移量(空格),而 getsize()返回当前(输入)文本的实际尺寸。
来自 Consola 字体家族 website :

... a monospaced font is specified. All characters have the same width ...


这意味着每个字符的宽度应该相同,并且每个字符与下一个字符的间距应该相同。可以在以下脚本中看到:
import PIL
from PIL import ImageFont
font = ImageFont.truetype("consola.ttf",size=15)
print(font.getsize("a"))
print(font.getsize("h"))
print(font.getsize("g"))
print(font.getsize("z"))
print(font.getsize("."))
print(font.getsize("@"))
print(font.getlength("a"))
print(font.getlength("h"))
print(font.getlength("g"))
print(font.getlength("z"))
print(font.getlength("."))
print(font.getlength("@"))
哪些输出:
(8, 12)
(8, 12)
(8, 15)
(8, 12)
(8, 12)
(9, 15)
8.0
8.0
8.0
8.0
8.0
8.0
几乎每个字符的宽度都是 8,偏移量是 8,但是它们的高度不同,因为有些字符有延伸部分,例如“g””向下延伸的部分。唯一的异常(exception)是“@”,它有一个宽度为 9,为此我找不到任何理由。

关于python - 为什么 ImageFont.getsize() 在使用等宽字体时会不一致地测量字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65556197/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com