我使用以下两种方法为.ttf字体文件生成文本预览图像
PIL方法:
def make_preview(text, fontfile, imagefile, fontsize=30):
try:
font = ImageFont.truetype(fontfile, fontsize)
text_width, text_height = font.getsize(text)
img = Image.new('RGBA', (text_width, text_height))
draw = ImageDraw.Draw(img)
draw.text((0, 0), text, font=font, fill=(0, 0, 0))
return True
except:
return False
ImageMagick方法:
def make_preview(text, fontfile, imagefile, fontsize=30):
p = subprocess.Popen(['convert', '-font', fontfile, '-background',
'transparent', '-gravity', 'center', '-pointsize', str(fontsize),
'-trim', '+repage', 'label:%s' % text, image_file])
return p==0
两种方法大多数时间都会创建正确的预览图像,但在极少数情况下(<2%),font.getsize(文本)无法获得正确的文本大小,导致文本溢出提供画布. ImageMagick有同样的问题. 示例字体和预览: HANFORD.TTF
http://download.appfile.com/HANFORD.png
是否有可能检测到这样的文本溢出并绘制文本以符合我们预期的画布?