python - 使用 PIL 裁剪字体

标签 python fonts python-imaging-library text-rendering

这张图片是用 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()),第二次渲染文本加上一个好的上升和下降,将渲染的文本切成第一个报告的宽度和第二个实际高度。
  • 使用不同的库,例如 AggDrawpyvips .

这在各种问题中都有引用 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/

相关文章:

python - 打印多个没有空格的对象

javascript - 如何加载 Font Awesome ie8 w/字体下载禁用

java - PDFBox 必须使用字体头

python - 在python中解释来自照片的exif数据的GPS信息

python - 如何解决IOError :broken data stream when reading image file?

python - PIP 安装包不正确或安装在错误的位置

python - 使用 gspread 获取所有谷歌表格的列表?

python - 使用 ATLAS/LAPACK 支持构建 numpy

python - 操作json文件python

javascript - 用户素材-UI React 字体图标