首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PIL裁剪字体

使用PIL裁剪字体
EN

Stack Overflow用户
提问于 2009-12-20 02:38:53
回答 4查看 3.2K关注 0票数 6

此图像是用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

EN

回答 4

Stack Overflow用户

发布于 2012-01-31 21:17:03

我无法使用到目前为止提到的方法来解决某些字体的这个问题,所以我最终使用aggdraw作为PIL的text drawig方法的透明替代品。

重写为aggdraw的代码将如下所示:

import Image
import aggdraw

im = Image.new("RGBA", (200, 200), 'white')
draw = aggdraw.Draw(im)

# note that the color is specified in the font constructor in aggdraw
font = aggdraw.Font((0,0,0), "VeraSe.ttf", size=12, opacity=255)

draw.text((1, 1), " %s: " % "ggjyfFwe__", font) # no color here
draw.text((1, 30), " %s" % 15, font)

draw.flush() # don't forget this to update the underlying PIL image!

im.show()
票数 1
EN

Stack Overflow用户

发布于 2009-12-20 18:49:00

我的建议是,在创建图像对象之前,获取所需的文本大小。

这是使用font.getsize("text") (documentation)完成的。

在我制作的一个图像生成脚本中,我首先通过调用font.getsize("Åj")的equvalient找到了一行文本的最大高度(如果您只需要US-ASCII码,您可以找到"Aj"的高度)。然后,我计算了所需的图像高度和行距,包括页边距和行距。

票数 0
EN

Stack Overflow用户

发布于 2012-03-21 01:19:39

这个"bug“在2012年Ubuntu 11.10中仍然存在。Fontsize 11,12,13和15完全裁剪下划线。

#!/usr/bin/env python
""" demonstrates clipping of descenders for certain font sizes """
import Image, ImageDraw, ImageFont
fontPath = "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans-Bold.ttf"
im = Image.new('L', (256, 256))
ys=15
for i in range(10,21):
    fh = ImageFont.truetype(fontPath, i)
    sometext="%dgt_}" % (i)
    ImageDraw.Draw(im).text((10, ys ),sometext , 254, fh)
    ys+=i+5
im.show()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1933766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档