我正在通过 PIL
在基本图像上绘制文本。要求之一是如果所有字符的组合宽度超过基本图像的宽度,则它会溢出到下一行。
目前我正在使用 textwrap.wrap(text, width=16)
来完成此操作。这里width
定义了一行中容纳的字符数。现在文本可以是任何内容,因为它是用户生成的。因此,问题在于硬编码 width
不会考虑由于字体类型、字体大小和字符选择而导致的 width
变化。
我的意思是什么?
想象一下我正在使用 DejaVuSans.ttf
,大小为 14。W
的长度为 14,而“i”的长度为 4。对于宽度为 400,单行最多可容纳 100 个 i
个字符。但只有 29 个 W
字符。我需要制定一种更智能的换行方式,当字符宽度总和超过基本图像宽度时,字符串就会被破坏。
有人可以帮我制定这个吗?一个说明性的例子就太好了!
最佳答案
由于您知道每个字符的宽度,因此应该将其放入字典中,从中获取宽度以计算字符串宽度:
char_widths = {
'a': 9,
'b': 11,
'c': 13,
# ...and so on
}
从这里您可以查找每个字母并使用该总和来检查您的宽度:
current_width = sum([char_widths[letter] for letter in word])
关于python - 根据字符宽度将字符串分成多行(python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43827756/