gpt4 book ai didi

python - 枕头,如何将文字放在图像的中心

转载 作者:太空狗 更新时间:2023-10-30 01:24:43 26 4
gpt4 key购买 nike

我使用 Pillow (PIL) 6.0 并在图像中添加文字。我想把文字放在图片的中央。这是我的代码,

import os
import string
from PIL import Image
from PIL import ImageFont, ImageDraw, ImageOps

width, height = 100, 100

text = 'H'
font_size = 100

os.makedirs('./{}'.format(text), exist_ok=True)

img = Image.new("L", (width, height), color=0) # "L": (8-bit pixels, black and white)
font = ImageFont.truetype("arial.ttf", font_size)
draw = ImageDraw.Draw(img)
w, h = draw.textsize(text, font=font)
draw.text(((width-w)/2, (height-h)/2), text=text, fill='white', font=font)

img.save('H.png')

这是输出:

enter image description here

问题:

文本在水平方向居中,但在垂直方向不居中。如何将它水平和垂直放置在中心?

最佳答案

文本总是在字符周围添加一些空格,例如如果我们创建一个与为您的“H”报告的大小完全相同的框

img = Image.new("L", (width, height), color=0)   # "L": (8-bit pixels, black and white)
font = ImageFont.truetype("arial.ttf", font_size)
draw = ImageDraw.Draw(img)
w, h = draw.textsize(text, font=font)
# draw.text(((width-w)/2, (height-h)/2), text=text, fill='white', font=font)
# img.save('H.png')
img2 = Image.new("L", (w, h), color=0) # "L": (8-bit pixels, black and white)
draw2 = ImageDraw.Draw(img2)
draw2.text((0, 0)), text=text, fill='white', font=font)
img2.save('H.png')

给出边界框:

enter image description here

知道行高通常比字形/字符大 ~20%(+ 一些试验和错误),我们可以计算出额外空间的范围。 (宽度的额外空间是均匀分布的,因此对居中没有意义)。

draw2.text((0, 0 - int(h*0.21)), text=text, fill='white', font=font)

将“H”移动到顶部:

enter image description here

将其插入到您的原始代码中:

img = Image.new("L", (width, height), color=0)   # "L": (8-bit pixels, black and white)
font = ImageFont.truetype("arial.ttf", font_size)
draw = ImageDraw.Draw(img)
w, h = draw.textsize(text, font=font)
h += int(h*0.21)
draw.text(((width-w)/2, (height-h)/2), text=text, fill='white', font=font)
img.save('H.png')

给出:

enter image description here

0.21 因子通常适用于相同 字体的大范围字体大小。例如。只需插入字体大小 30:

enter image description here

关于python - 枕头,如何将文字放在图像的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55773962/

26 4 0