Я использую следующие два метода для генерировать текстовое изображение предварительного просмотра для .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
NEWTOW.TTF http://download.appfile.com/NEWTOW.png
MILF.TTF http://download.appfile.com/MILF.png
SWANSE.TTF http://download.appfile.com/SWANSE.png
Я изучил документацию ImageMagick и нашел объяснение этой проблемы по http://www.imagemagick.org/Usage/text/#overflow.
Действительно ли возможно обнаружить такое текстовое переполнение и нарисовать текст для установки холсту, как мы ожидали?