qin*_*ong 5 python python-imaging-library python-3.x
我使用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')
Run Code Online (Sandbox Code Playgroud)
文本在水平居中,但不在垂直居中。如何水平和垂直放置在中央?
the*_*orn 13
文本总是在字符周围有一些额外的空间,例如,如果我们创建一个与您的“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')
Run Code Online (Sandbox Code Playgroud)
给出边界框:
知道行高通常比字形/字符大约 20%(+ 一些试验和错误),我们可以计算出额外空间的范围。(宽度的额外空间是均匀分布的,因此居中并不有趣)。
draw2.text((0, 0 - int(h*0.21)), text=text, fill='white', font=font)
Run Code Online (Sandbox Code Playgroud)
将“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)
h += int(h*0.21)
draw.text(((width-w)/2, (height-h)/2), text=text, fill='white', font=font)
img.save('H.png')
Run Code Online (Sandbox Code Playgroud)
给出:
该0.21系数通常适用于同一字体的大范围字体大小。例如,只需插入字体大小 30:
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |