4

这里有一个类似的问题:python PIL draw multiline text on image

但是,该解决方案使用:

textwrap.wrap(..., width=40)

这是字符的宽度。我正在尝试做一些宽度应该以像素为单位的事情,并且所有文档似乎都只有字符的宽度。(我会有不同大小的文本,因此对于某个宽度的图像,字符宽度不会是恒定的)

4

2 回答 2

3

我的简单解决方案:

def wrap_text(text, width, font):
    text_lines = []
    text_line = []
    text = text.replace('\n', ' [br] ')
    words = text.split()
    font_size = font.getsize(text)

    for word in words:
        if word == '[br]':
            text_lines.append(' '.join(text_line))
            text_line = []
            continue
        text_line.append(word)
        w, h = font.getsize(' '.join(text_line))
        if w > width:
            text_line.pop()
            text_lines.append(' '.join(text_line))
            text_line = [word]

    if len(text_line) > 0:
        text_lines.append(' '.join(text_line))

    return text_lines
于 2014-11-04T09:47:56.423 回答
1

我试着找到你说的东西,但我什么也没找到,所以我创建了自己的方法。font.getsize(TEXT) 返回 TEXT 的宽度和高度(以像素为单位),因此我的方法将字符串拆分为单词,并验证单词是否大于图像的宽度,如果不是,我将单词连接到变量中. 当此变量大于图像宽度时,我将附加到列表中并清除变量,因此我验证下一行。

于 2012-08-08T11:43:16.720 回答