2014-06-10 42 views
4

我試圖做的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 
+0

我手動創建用Photoshop照片是在y軸上在2400有一個線,draw.line正確拉過形象的路線,所以看來由於某種原因,' draw.text'方法有一些問題。 –

回答

3

我得到類似的東西(用尺寸小10倍):

example test1.jpg output

發生這種情況是因爲(X,Y)座標給ImageDraw.text()是文本的頂部左上角:

PIL.ImageDraw.Draw.text(XY,文本,填充=無,字體=無,錨=無)

繪製在給定位置的字符串。

參數:

  • XY - 左上文字的角落。
  • text - 要繪製的文本。
  • font - 一個ImageFont實例。
  • 填充 - 用於文本的顏色。

這證實了code:文本變成一個位圖,然後在XY繪製。

+0

對,如果x,y座標是文本的左上角,我會希望繪製的線位於文本的最上方,這不會發生。該行和文本之間有相當大的空間。你似乎也有這個問題......?任何想法爲什麼發生? –

+0

我的猜測是這裏標記爲'top bearing line':http://www.myfirstfont.com/images/glyphterms.gif,並在這裏描述爲'top side bearing':http://www.freetype.org/ freetype2/docs/glyphs/glyphs-3.html – Hugo

+0

嗯,這是有道理的。感謝您的意見。 –

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