Pillow ImageDraw 文本坐标居中
Pillow ImageDraw text coordinates to center
下面的代码将文本置于 x 的中心,但我不知道如何计算 y 坐标的中心...它不是 (imgH-h)/2!
(右y坐标为-80)
from PIL import Image, ImageDraw, ImageFont
font= './fonts/BebasNeue-Regular.ttf'
color = (255, 244, 41)
text = 'S'
img = Image.new('RGB', (500, 500), color=(255, 255, 255))
imgW, imgH = img.size
fnt = ImageFont.truetype(font, 600)
d = ImageDraw.Draw(img)
w, h = d.textsize(text, fnt)
nullH = (imgH-h)
print(imgH, h)
d.text(((imgW-w)/2, nullH), text, font=fnt, fill=color)
img.show()
screenshot of execution of code
这似乎与一个旧枕头有关bug。您需要将偏移量添加到 textsize
。这对我有用:
from PIL import Image, ImageDraw, ImageFont
color = (255, 244, 41)
text = 'S'
N = 500
size_image = width_image, height_image = N, N
img = Image.new('RGB', size_image, color='white')
font_path = './fonts/BebasNeue-Regular.ttf'
font = ImageFont.truetype(font_path, size=600)
draw = ImageDraw.Draw(img)
width_text, height_text = draw.textsize(text, font)
offset_x, offset_y = font.getoffset(text)
width_text += offset_x
height_text += offset_y
top_left_x = width_image / 2 - width_text / 2
top_left_y = height_image / 2 - height_text / 2
xy = top_left_x, top_left_y
draw.text(xy, text, font=font, fill=color)
img.show()
下面的代码将文本置于 x 的中心,但我不知道如何计算 y 坐标的中心...它不是 (imgH-h)/2!
(右y坐标为-80)
from PIL import Image, ImageDraw, ImageFont
font= './fonts/BebasNeue-Regular.ttf'
color = (255, 244, 41)
text = 'S'
img = Image.new('RGB', (500, 500), color=(255, 255, 255))
imgW, imgH = img.size
fnt = ImageFont.truetype(font, 600)
d = ImageDraw.Draw(img)
w, h = d.textsize(text, fnt)
nullH = (imgH-h)
print(imgH, h)
d.text(((imgW-w)/2, nullH), text, font=fnt, fill=color)
img.show()
screenshot of execution of code
这似乎与一个旧枕头有关bug。您需要将偏移量添加到 textsize
。这对我有用:
from PIL import Image, ImageDraw, ImageFont
color = (255, 244, 41)
text = 'S'
N = 500
size_image = width_image, height_image = N, N
img = Image.new('RGB', size_image, color='white')
font_path = './fonts/BebasNeue-Regular.ttf'
font = ImageFont.truetype(font_path, size=600)
draw = ImageDraw.Draw(img)
width_text, height_text = draw.textsize(text, font)
offset_x, offset_y = font.getoffset(text)
width_text += offset_x
height_text += offset_y
top_left_x = width_image / 2 - width_text / 2
top_left_y = height_image / 2 - height_text / 2
xy = top_left_x, top_left_y
draw.text(xy, text, font=font, fill=color)
img.show()