python - 根据字符宽度将字符串分成多行(python)

标签 python word-wrap text-processing

我正在通过 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/

相关文章:

python - 所有列上的 SQLAlchemy 继承过滤器

Python - 仅在忽略大小写的字符串中计算字母数量

php - 用于缩短文本的 Twig 扩展?

bash - 在 bash 中切换行位置

python - 自定义 matplotlib 图形的默认工具栏图标图像

css - 对长表格单元格进行换行,同时在其他单元格中保持动态宽度

c - 在 Objective-C 中包装 C 库的技巧

bash - 如何使用正则表达式分隔符获取第 n 列

linux - 在 linux 中用条件交换列

python - 如何使用 Tkinter 按钮退出 Python?