2017-05-02 68 views
1

我正在黑色條上繪製一些文本,然後使用PIL將結果粘貼到基本圖像的頂部。一個關鍵是將文本位置完美地放在黑色條的中心。正確對中文本(PIL/Pillow)

我通過下面的代碼迎合的是:

from PIL import Image, ImageFont, ImageDraw 

background = Image.new('RGB', (strip_width, strip_height)) #creating the black strip 
draw = ImageDraw.Draw(background) 
font = ImageFont.truetype("/usr/share/fonts/truetype/freefont/FreeSansBold.ttf", 16) 
text_width, text_height = draw.textsize("Foooo Barrrr!") 
position = ((strip_width-text_width)/2,(strip_height-text_height)/2) 
draw.text(position,"Foooo Barrrr!",(255,255,255),font=font) 
offset = (0,base_image_height/2) 
base_image.paste(background,offset) 

通知我如何設置position

現在所有說的和做,結果看起來像這樣:

enter image description here

的文本不是正是 middled。這是輕微的權利和下降。我該如何改進我的算法?

+0

什麼是'text'的內容是什麼? 「Foooo Barrrr!」??爲什麼在draw.textsize調用中使用'text',而在draw.text調用中使用了新的字符串? – tiwo

+0

draw.textsize不知道您使用的字體。我認爲你應該通過它作爲第二個參數。 也許你需要回到文檔,或者提供一個簡單的例子。 – tiwo

+0

@tiwo:'text'是一個錯字,它應該是''Foooo Barrrr!''。我已經解決了這個問題。 –

回答

1

記得通過你的font draw.textsize作爲第二個參數(並確保你真的使用相同的textfont參數draw.textsize和draw.text)。

下面是我工作:

from PIL import Image, ImageFont, ImageDraw 

def center_text(img, font, text, color=(255, 255, 255)): 
    draw = ImageDraw.Draw(img) 
    text_width, text_height = draw.textsize(text, font) 
    position = ((strip_width-text_width)/2,(strip_height-text_height)/2) 
    draw.text(position, text, color, font=font) 
    return img 

用法:

strip_width, strip_height = 300, 50 
text = "Foooo Barrrr!!" 

background = Image.new('RGB', (strip_width, strip_height)) #creating the black strip 
font = ImageFont.truetype("times", 24) 
center_text(background, font, "Foooo Barrrr!") 

結果:

fooobarrrr