我遇到PIL的ImageDraw模块问题,特别是Draw.textsize
方法。这种方法应该采用一个字符串和一种字体,并返回该字体呈现时字符串占用的宽度和高度。但它似乎对返回的高度有一个下限,但我不能说服它返回低于43
的任何东西。下面是一个例子(link),以显示我正在寻找在(约基于返回的宽度&高度文本绘制边界框),这里是产生它的代码:PIL ImageDraw.textsize返回不正确的高度
from PIL import Image, ImageDraw, ImageFont # PIL 1.1.7; Python 2.6.6
im = Image.open(r'C:\test\blank.png').convert('RGB')
draw = ImageDraw.Draw(im)
TEXTCOLOR = (0, 0, 0)
X = 10
Y = 3
for fontsize in xrange(8, 51):
# Other fonts behave the same way
font = ImageFont.truetype('Arial.ttf', fontsize)
text = 'Hello, World! Size %d' % fontsize
width, height = draw.textsize(text, font=font)
print 'Font size %d: %d x %d' % (fontsize, width, height)
bbox = [(X, Y), (X+width, Y+height)]
draw.rectangle(bbox, outline=TEXTCOLOR)
draw.text((X, Y), text, font=font, fill=TEXTCOLOR)
Y += height + 3
im.show()
一旦字体起来到大小38,边界框延伸以正确匹配,但在此之前,它被设置为静态43
。问题是,有谁知道为什么ImageDraw会以这种方式行事,有谁知道解决它的方法吗?我目前正在围绕这一问题工作通过设置:
width = min(width, fontsize+1)
...但是,这显然不是出有史以来最强大的解决方案。
你从哪里得到你正在使用的PIL模块?当我尝试在Python 2.7.3下运行代码时,出现'ImportError:_imagingft C模块未安装'错误。 – martineau
@martineau我不知道我最初是从哪里得到的(但我确实记得它的设置很痛苦)。我使用的安装程序被命名为'PIL-fork-1.1.7.win32-py2.6.exe',但现在没有运气发现它。 –
我遇到的'ImportError'是一个常见的问题,我试图解决。当/如果我这样做,我会再看看你的问题。 – martineau