Python 无法将文本与图像上绘制的线对齐

Python 无法将文本与图像上绘制的线对齐,python,python-imaging-library,pillow,Python,Python Imaging Library,Pillow,我试图用python库枕头(PIL的叉子)进行一些图像处理,但遇到了一个奇怪的问题。出于某种原因,当我试图在同一y坐标上画一条线和一些文本时,它们不匹配。文本有点下线,但我有两个图形从同一点开始。以前有没有人遇到过这个问题和/或知道如何解决它?以下是我使用的代码: image = Image.open("../path_to_image/image.jpg") draw = ImageDraw.Draw(image) font = ImageFont.truetype("../fonts/A

我试图用python库枕头(PIL的叉子)进行一些图像处理,但遇到了一个奇怪的问题。出于某种原因,当我试图在同一y坐标上画一条线和一些文本时,它们不匹配。文本有点下线,但我有两个图形从同一点开始。以前有没有人遇到过这个问题和/或知道如何解决它?以下是我使用的代码:

image = Image.open("../path_to_image/image.jpg")

draw = ImageDraw.Draw(image)

font = ImageFont.truetype("../fonts/Arial Bold.ttf", 180)

draw.line((0,2400, 500,2400), fill="#FFF", width=1)
draw.text((0, 2400), "Test Text", font=font) 

image.save(os.path.join(root, "test1.jpg"), "JPEG", quality=100)

return
我得到了类似的东西(尺寸小10倍):

发生这种情况是因为给定的(x,y)坐标是文本的左上角:

PIL.ImageDraw.Draw.text(xy,text,fill=None,font=None,anchor=None)

在给定位置绘制字符串

参数:

  • xy–文本的左上角
  • 文本–要绘制的文本
  • font–一个ImageFont实例
  • 填充–用于文本的颜色

这在中得到了确认:文本被转换成位图,然后在xy处绘制。

对于那些有类似问题的人,我最终创建了一个帮助函数,手动调整字体大小,直到
font.getsize(text)[1]
返回正确大小的文本。下面是一个片段:

def adjust_font_size_to_line_height(font_location, desired_point_size, text):
    adjusted_points = 1

    while True:
        font = ImageFont.truetype(font_location, adjusted_points)
        height = font.getsize(text)[1]

        if height != desired_point_size:
            adjusted_points += 1
        else:
            break

    return adjusted_points

我用photoshop手动创建了一张在y轴2400处有一条线的照片,draw.line在图像上正确地画出了这条线,因此出于某种原因,
draw.text
方法似乎有一些问题。对了,如果x,y坐标是文本的左上角,我希望画的线穿过文本的最顶端,但事实并非如此。行和文本之间有相当大的空间。看来你也有这个问题。。。?知道为什么会这样吗?我猜这就是这里被称为“顶轴承线”的地方:这里被称为“顶侧轴承”:嗯,这是有道理的。谢谢你的意见。