2016-01-04 90 views
6

EDIT:加入完整工作示例Python的圖像庫 - 字體定位

我有以下程序:

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 50 
filename = 'font_test.png' 
font="/usr/share/fonts/truetype/msttcorefonts/arial.ttf" 
text="5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE), color="grey") 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(font, 40) 
font_width, font_height = font.getsize(text) 
draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0), text, font=font, fill="red") 
image.save(filename, "PNG") 

這將生成以下圖像:

enter image description here

它似乎在編寫文本時,PIL庫會在頂部添加一些邊距。這個邊距取決於我使用的字體。

我如何努力文本(我想這是在一個矩形中間)的位置時考慮到這一點?

(在Ubuntu 14.04使用Python 2.7.6與2.3.0枕)

+1

請提供一個**完整**程序來演示錯誤,包括任何'import'語句。 –

+1

該一個理智原因我可以想像爲是如果打開三世使用比例的數字,在這種情況下,餘量將是x高度和上升,在這種情況下,它應該是有之間的差。在一個健全的少的原因是,由於某種原因,在PIL文本運行的大小有某種「補償」添加到它:https://pillow.readthedocs.org/en/3.0.x/_modules/PIL /ImageFont.html。也許這就是你看到的差異?不能解釋爲什麼黑色的矩形不會延伸到整個字母之後。 – millimoose

+0

添加完整的工作示例。 – Filip

回答

5

我不明白爲什麼,但是從y統籌減去font.getoffset(text)[1]修復它在我的電腦上。

from PIL import Image, ImageDraw, ImageFont 

FULL_SIZE = 100 
filename = 'font_posn_test.png' 
fontname = '/usr/share/fonts/truetype/msttcorefonts/arial.ttf' 
textsize = 40 
text = "5" 

image = Image.new("RGBA", (FULL_SIZE, FULL_SIZE)) 
draw = ImageDraw.Draw(image) 
font = ImageFont.truetype(fontname, textsize) 
print font.getoffset(text) 
print font.font.getsize(text) 
font_width, font_height = font.getsize(text) 

font_y_offset = font.getoffset(text)[1] # <<<< MAGIC! 

draw.rectangle(((0, 0), (font_width, font_height)), fill="black") 
draw.text((0, 0 - font_y_offset), text, font=font, fill="red") 
image.save(filename, "PNG") 
+0

這解決了我的問題!謝謝 :) – Filip