此图像是用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
发布于 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()
发布于 2009-12-20 18:49:00
我的建议是,在创建图像对象之前,获取所需的文本大小。
这是使用font.getsize("text")
(documentation)完成的。
在我制作的一个图像生成脚本中,我首先通过调用font.getsize("Åj")
的equvalient找到了一行文本的最大高度(如果您只需要US-ASCII码,您可以找到"Aj"
的高度)。然后,我计算了所需的图像高度和行距,包括页边距和行距。
发布于 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()
https://stackoverflow.com/questions/1933766
复制相似问题