PIL切断字母顶部

Mat*_*att 5 python fonts text-rendering python-imaging-library

我花了很多时间使用Python制作我的第一个Web应用程序,并且我使用来生成图像.在阅读了很多内容之后,我设法实现了正确的文本对齐,包装,生成具有许多扩展的文件等.

但是,PIL生成的所有文本都在顶部被截断.这是一个样本.

PIL生成图像的示例,顶部有文本切断

它应该?Ó?jygpq用各种字体说(字体名称在左边).

我在这里找到了一些帖子:用PIL修剪字体,但我想避免使用另一个模块(aggdraw); 因为我已经在PIL中找到了很多东西,所以我想坚持下去.

我尝试了很多不同大小的字体,但文字仍然被切断了.我甚至尝试使用PIL字体,但它仍然无效.[还将OTF转换为BDF,并转换为PIL].

这是在Ubuntu上.我接下来应该尝试什么?

mmg*_*mgp 4

我希望在这一点上是错误的,但唯一正确的修复依赖于修补 _imagingft.c\n渲染文本的方式。PIL 依赖 FreeType 来完成此任务,但 PIL 似乎错误地计算了定位。另外,高度getsize被高估了(尽管这不会引起问题)。目前,我已经在以下位置放置了一个补丁来处理这些问题: http: //pastebin.com/jP2iLkDN(似乎有更好的方法来修补渲染代码)。

\n\n

以下是我分别在不使用补丁和使用补丁时获得的输出的一些示例:

\n\n

在此输入图像描述     在此输入图像描述

\n\n

使用链接讨论中存在的代码的结果。在 OSX 上:

\n\n

在此输入图像描述     在此输入图像描述

\n\n

在Ubuntu上:

\n\n

在此输入图像描述     在此输入图像描述

\n\n

这是生成顶部数字的代码:

\n\n
# -*- encoding: utf8 -*-\nimport sys\nimport Image, ImageDraw, ImageFont\n\nim = Image.new("RGBA", (1000, 1000), \'white\')\ndraw = ImageDraw.Draw(im)\n\nstart_y = 7\ntext = u\'\\u00d1\\u00d3y\xc5\xbb\\u00d4\xc4\x86gp\\u010c\\u0137\'\nfor i in xrange(28, 46, 2):\n    font = ImageFont.truetype(\'Junicode-Bold.ttf\', i)\n    width, height = font.getsize(text)\n    draw.rectangle((0, start_y, width, height + start_y), outline=\'blue\')\n    draw.text((0, start_y), text, font=font, fill=\'black\')\n    start_y += height + 7\n\nim.crop((0, 0, width + 1, start_y + 2)).save(sys.argv[1])\n
Run Code Online (Sandbox Code Playgroud)\n\n

底部的数字是根据有关 PIL 剪切部分文本的链接主题中存在的代码生成的。

\n