getsize ImageFont () не получает размер правильного текста?

Я использую следующие два метода для генерировать текстовое изображение предварительного просмотра для .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.

Действительно ли возможно обнаружить такое текстовое переполнение и нарисовать текст для установки холсту, как мы ожидали?

5
задан jack 27 December 2009 в 07:51
поделиться