我希望在这个问题上出错,但唯一正确的解决方法就是修补_imagingft.c 如何呈现文本。 PIL依赖FreeType完成此任务,但PIL似乎错误地计算了定位。此外,getsize
中的高度被高估(尽管这不会导致问题)。目前,我已经提供了一个补丁来处理这些问题:http://pastebin.com/jP2iLkDN(似乎有更好的方法来修补渲染代码)。
这里是输出I得到无贴片并与补丁,分别的一些例子:使用存在于连接的讨论中的代码
结果。在OSX:
在Ubuntu:
这里是产生顶部的数字的代码:
# -*- 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