Hen*_*ter 9 python python-imaging-library
我遇到了PIL的ImageDraw模块的问题,特别是Draw.textsize
方法.该方法应该采用字符串和字体,并返回字符串在以该字体呈现时将占用的宽度和高度.它似乎在它返回的高度上有一个下限,但是:我无法说服它返回低于它的任何东西43
.这是一个示例(链接),用于显示我正在查看的内容(基于返回的宽度和高度在文本周围绘制的边界框),以下是生成它的代码:
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()
Run Code Online (Sandbox Code Playgroud)
一旦字体达到大约38的大小,边界框就会拉伸以正确匹配它,但在此之前,它被设置为静态43
.问题是,有没有人知道为什么ImageDraw会以这种方式运行,有没有人知道修复它的方法?我目前正在通过设置以下方法解决此问题:
width = min(width, fontsize+1)
Run Code Online (Sandbox Code Playgroud)
......但这显然不是有史以来最强大的解决方案.
归档时间: |
|
查看次数: |
4391 次 |
最近记录: |