如何在使用PIL時居中對齊(和中間垂直對齊)文本?使用PIL居中對齊文本?
33
A
回答
61
使用Draw.textsize
method來計算文字大小並相應地重新計算位置。
下面是一個例子:
from PIL import Image, ImageDraw
W, H = (300,200)
msg = "hello"
im = Image.new("RGBA",(W,H),"yellow")
draw = ImageDraw.Draw(im)
w, h = draw.textsize(msg)
draw.text(((W-w)/2,(H-h)/2), msg, fill="black")
im.save("hello.png", "PNG")
和結果:
2
使用textsize
方法(請參閱docs)在實際繪製文本對象之前計算出文本對象的尺寸。然後從適當的座標處開始繪製它。
42
這裏是使用textwrap分割一個長行成碎片一些示例代碼,然後使用該textsize
方法來計算位置。
from PIL import Image, ImageDraw, ImageFont
import textwrap
astr = '''The rain in Spain falls mainly on the plains.'''
para = textwrap.wrap(astr, width=15)
MAX_W, MAX_H = 200, 200
im = Image.new('RGB', (MAX_W, MAX_H), (0, 0, 0, 0))
draw = ImageDraw.Draw(im)
font = ImageFont.truetype(
'/usr/share/fonts/truetype/msttcorefonts/Arial.ttf', 18)
current_h, pad = 50, 10
for line in para:
w, h = draw.textsize(line, font=font)
draw.text(((MAX_W - w)/2, current_h), line, font=font)
current_h += h + pad
im.save('test.png')
+0
+1可選字體參數的使用示例 – btk 2012-03-21 03:52:21
3
你可以找到http://tools.jedutils.com/tools/center-text-image
的這一個實現你可以使用該頁面創建的圖像就在那裏,而不是自己實施的常規,但使用的代碼包含在頁面。
9
請注意Draw.textsize方法不準確。我正在處理低像素圖像,經過一些測試,結果證明textsize認爲每個字符的寬度是6像素,而「I」則是最大的。 2個像素和一個「W」需要分鐘。 8像素(在我的情況)。所以,根據我的文字,它是或根本不居中。雖然,我想「6」是一個平均值,所以如果你使用長文本和大圖片,它應該還是可以的。
但現在,如果你想要一些真正的精度,更好的使用你要使用的字體對象的getSize方法對應:
arial = ImageFont.truetype("arial.ttf", 9)
w,h = arial.getsize(msg)
draw.text(((W-w)/2,(H-h)/2), msg, font=arial, fill="black")
正如Edilio的鏈接使用。
相關問題
- 1. 用Python-pptx居中對齊文本
- 2. 垂直居中對齊文本
- 3. CoreText文本水平居中對齊
- 4. 垂直居中對齊文本按鈕
- 5. 居中文本對齊的Listbox控件?
- 6. 無法居中對齊文本
- 7. Bootstrap或css:居中對齊文本
- 8. 居中和對齊HTML文本的行
- 9. 垂直居中對齊文本
- 10. 如何讓文本與塊對齊但居中對齊?
- 11. 使用文本對齊或內嵌塊居中導航欄? (jekyll)
- 12. HTML CSS外層div文本居中對齊,DIV文本對齊左內
- 13. 在JTextArea或JTextPane中居中文本 - 水平文本對齊
- 14. 如何使多行左對齊時單行文本居中對齊?
- 15. 如何對齊其他居中文本旁邊的文本
- 16. 對齊第二跨度的文本已居中的文本
- 17. 設置文本在C#中使用OpenXML在Excel文檔中居中對齊
- 18. HTML/CSS:如何使div內的文本自動居中對齊
- 19. 使用clistctrl對齊文本
- 20. 文本左對齊和右對齊,並且在固定標題中居中居中
- 21. 如何在Android中的標籤欄中居中對齊文本
- 22. 如何在EditText中居中並左對齊提示文本?
- 23. 如何在圖像中居中並對齊文本?
- 24. 如何居中對齊div中的文本
- 25. 在緊湊框架中居中對齊文本?
- 26. 如何居中對齊Windows窗體中的標題欄文本?
- 27. 如何在UITextView中居中對齊文本?
- 28. 在html/css中水平和垂直居中對齊文本
- 29. PyQt5無法居中對齊Qlabel中的文本
- 30. 居中對齊UITableViewCell問題中的文本
draw.textsize :(自身,文本,字體=無) – WeizhongTu 2015-06-12 03:26:52
如果字體大小不同,請務必包含如下字體: 'draw.textsize(msg,font = myFont)',否則獲勝沒有正確居中 – Coco 2017-02-23 09:40:38