使用像素Python PIL中的最大宽度将文本写入图像

时间:2012-06-22 16:06:16

标签: python image python-imaging-library textwrapping

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

但是,该解决方案使用:

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

以字符为单位的宽度。我正在尝试做宽度应以像素为单位的内容,所有文档似乎只有字符宽度。 (我将使用不同大小的文本,以便某个宽度图像的字符宽度不会保持不变)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我的简单解决方案:

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