PIL切断的字母顶部(PIL cuts off top of letters)

2019-07-04 22:48发布

我花了大量时间来使用Python我的第一个Web应用程序,我使用PIL生成图像。 大量阅读后,我已经成功地实施适当的文本对齐,包装,加了很多扩展等生成的文件

然而,由PIL产生的所有文字顶部被切断。 下面是一个示例。

应该说ŻÓĆjygpq在多种字体(字体名称左侧)。

我在这里找到一些帖子: 字体与PIL裁剪 ,但我想避免使用其他模块(aggdraw); 因为我已经想通了在PIL这么多东西已经我想坚持到底。

我试过很多字体大小不同,但文本仍切断。 我甚至尝试使用PIL字体,但它仍然无法正常工作。 [另外转换到OTF BDF,和PIL]。

这是在Ubuntu。 我应该尝试下?

Answer 1:

我希望是错误的就这一个,但唯一正确的修复依赖于修补_imagingft.c如何呈现的文本。 PIL取决于FreeType的这个任务,但PIL似乎被错估的定位。 此外,在高度getsize被高估(尽管这不会导致问题)。 就目前而言,我已经把一个补丁,在处理这些问题: http://pastebin.com/jP2iLkDN (似乎有修补的渲染代码更好的方法)。

以下是输出我得到没有补丁与补丁,分别是一些例子:

结果使用存在于链接讨论的代码。 在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切断部分文本链接的主题中的代码生成的。



Answer 2:

不是最好的解决办法,但我看到的人都加入了领先的尾部空间,其文本解决了这个。



文章来源: PIL cuts off top of letters