gpt4 book ai didi

python - 使用 PIL 水平和垂直对齐文本

转载 作者:行者123 更新时间:2023-12-01 05:28:27 25 4
gpt4 key购买 nike

我有一个大约 100 个字符长的字符串(一个句子),通过此示例代码(它使用 textwrap),我可以将字符串分成几部分,然后使用 textsize 方法计算位置:

import Image
import ImageDraw
import ImageFont
import textwrap

sentence='This is a text. Some more text 123. Align me please.'
para=textwrap.wrap(sentence,width=15)

MAX_W,MAX_H=500,800
im = Image.new('RGB', (MAX_W, MAX_H), (0, 0, 0, 0))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype('/usr/share/fonts/truetype/msttcorefonts/Arial.ttf', 36)

current_h=0
for line in para:
w,h=draw.textsize(line, font=font)
draw.text(((MAX_W-w)/2, current_h), line, font=font)
current_h+=h

im.save('test.png')

此代码水平对齐文本,但我也需要垂直对齐文本。我怎样才能做到这一点?我的图像尺寸为 800x500,我只想以完美的方式容纳 100 个字符长的文本。也许我应该计算像素上的所有内容?

最佳答案

您需要考虑到每行文本都将使用文本的高度;计算所有线条的垂直尺寸并以此为基础确定您的位置:

# Half of the remainder of the image height when space for all lines has been reserved:
line_dimensions = [draw.textsize(line, font=font) for line in para]
offset = (MAX_H - sum(h for w, h in line_dimensions)) // 2

current_h = offset
for line, (w, h) in zip(para, line_dimensions):
draw.text(((MAX_W - w) // 2, current_h), line, font=font)
current_h += h

这里 line_dimensions 是段落中每一行的 (width, height) 元组列表。然后从中获取总高度(使用 sum() 和生成器表达式),然后我们用它来计算初始偏移量。

关于python - 使用 PIL 水平和垂直对齐文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858740/

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