【问题标题】:Pillow ImageDraw text coordinates to centerPillow ImageDraw 文本坐标居中
【发布时间】:2019-11-23 13:48:36
【问题描述】:

下面的代码将文本带到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

【问题讨论】:

    标签: python math image-processing python-imaging-library coordinate-systems


    【解决方案1】:

    它似乎与旧枕头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()
    

    【讨论】:

    • 谢谢! ,您的解决方案也解决了我的问题。
    猜你喜欢
    • 2017-09-29
    • 2013-03-20
    • 2021-07-07
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多