我希望在這個問題上出錯,但唯一正確的解決方法就是修補_imagingft.c 如何呈現文本。 PIL依賴FreeType完成此任務,但PIL似乎錯誤地計算了定位。此外,getsize
中的高度被高估(儘管這不會導致問題)。目前,我已經提供了一個補丁來處理這些問題:http://pastebin.com/jP2iLkDN(似乎有更好的方法來修補渲染代碼)。
這裏是輸出I得到無貼片並與補丁,分別的一些例子:使用存在於連接的討論中的代碼
![enter image description here](https://i.stack.imgur.com/6h8UI.png)
結果。在OSX:
![enter image description here](https://i.stack.imgur.com/shktz.png)
在Ubuntu:
![enter image description here](https://i.stack.imgur.com/AKLjh.png)
這裏是產生頂部的數字的代碼:
# -*- encoding: utf8 -*-
import sys
import Image, ImageDraw, ImageFont
im = Image.new("RGBA", (1000, 1000), 'white')
draw = ImageDraw.Draw(im)
start_y = 7
text = u'\u00d1\u00d3yŻ\u00d4Ćgp\u010c\u0137'
for i in xrange(28, 46, 2):
font = ImageFont.truetype('Junicode-Bold.ttf', i)
width, height = font.getsize(text)
draw.rectangle((0, start_y, width, height + start_y), outline='blue')
draw.text((0, start_y), text, font=font, fill='black')
start_y += height + 7
im.crop((0, 0, width + 1, start_y + 2)).save(sys.argv[1])
底部數字是根據鏈接主題中關於PIL剪切部分文本的代碼生成的。
有趣的問題,如果可以修改而不進入PIL的C部分,我會感到驚訝。 – mmgp
您是否可以包含用於打印這些文本的示例代碼?我修補了_imagingft.c,它似乎適用於我測試的字體。 – mmgp
感謝您的回答。 我簡化它一點點,但該方法是一樣的: ''color_text = '黑' 文本2 = 'DejaVuSans.ttf' font1 = ImageFont.truetype('的/ usr /共享/字體/的TrueType/TTF -dejavu/DejaVuSans.ttf',34) draw.text((20,50),text2,color_text,font = font1)'' 它沒有任何花哨的東西,只是幾個計算包裝,居中等 所以這只是pil提供的基本draw.text。理論上它應該是開箱即用的,特別是那些PIL類型的字體。 – Matt