这张图片是用 PIL 创建的。看到这张图片中的 g 和 y 是如何被切断的吗?我怎样才能避免这种情况?
http://img109.imageshack.us/img109/8874/screenshotep.png
创建此图像的代码非常简单(缩写):
import Image, ImageDraw, ImageFont
im = Image.new("RGBA", (200, 200), 'white')
draw = ImageDraw.Draw(im)
font = ImageFont.truetype("VeraSe.ttf", 12)
draw.text(
(1, 1),
" %s: " % "ggjyfFwe__",
font=font,
fill='black'
)
draw.text(
(1, 30),
" %s" % 15,
font=font,
fill='black'
)
im.show()
我尝试了几种不同的字体,但它总是被剪裁。令人惊讶的是,谷歌搜索“PIL 字体剪辑”返回的有用结果非常少......我在 Ubuntu 9.10 上使用 python 2.6.4 和 PIL 1.1.6
最佳答案
这是对这个较旧问题的迟到答案。
问题似乎是 PIL 和 Pillow 会剪裁渲染文本的边缘。这最常出现在尾随的宽字符和 decenders(如“y”)上。这也可以出现在某些字体的顶部。这是一个problem至少十年。无论调用 text()
的图像大小如何,它都会发生。冲突似乎是将边界矩形选择为“font.size * number_chars”而不是“我实际需要呈现的任何内容”,这发生在堆栈深处 (_imagingft.c
)。解决这个问题会导致其他问题,比如逐个字母地排列呈现的文本。
一些解决方案包括:
- 在字符串末尾添加一个空格。
im.text(xy, my_text + ' ', ...)
- 对于高度问题,获取文本的宽度 (
font.getsize()
),第二次渲染文本加上一个好的上升和下降,将渲染的文本切成第一个报告的宽度和第二个实际高度。 - 使用不同的库,例如 AggDraw或 pyvips .
这在各种问题中都有引用 fonts clipping with PIL , PIL cuts off top of letters , Properly render text with a given font in Python and accurately detect its boundaries .这些问题引用了相同的潜在问题,但并不重复
关于python - 使用 PIL 裁剪字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1933766/