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

时间:2014-06-10 01:04:20

标签: python python-imaging-library pillow

我正在尝试使用python库Pillow(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

2 个答案:

答案 0 :(得分:3)

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

example test1.jpg output

这种情况正在发生,因为ImageDraw.text()的(x,y)坐标是文本左上角的顶部

  

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

     

在给定位置绘制字符串。

     

参数:

     
      
  • xy - 文字的左上角。
  •   
  • text - 要绘制的文本。
  •   
  • font - 一个ImageFont实例。
  •   
  • fill - 用于文本的颜色。
  •   

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

答案 1 :(得分:0)

对于那些有类似问题的人,我最终创建了一个辅助函数,手动调整字体大小,直到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