Ich verwende die folgenden zwei Methoden, um Text Vorschaubild für eine Ttf SchriftdateiImageFont's getsize() bekommt nicht die korrekte Textgröße?
PIL Verfahren zu generieren:
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 Methode:
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
Beide Methoden Erstellen Sie in den meisten Fällen korrekte Vorschaubilder, aber in einigen seltenen Fällen (< 2%), die font.getsize (Text) nur cann ot erhalten die richtige Textgröße, die zu einem übergelaufenen bereitgestellten Canvas führt. ImageMagick hat dasselbe Problem.
Beispiel Fonts und Previews:
HANFORD.TTF http://download.appfile.com/HANFORD.png
NEWTOW.TTF http://download.appfile.com/NEWTOW.png
MILF.TTF http://download.appfile.com/MILF.png
Ich habe in ImageMagicks Dokumentationen geschaut und fand die Erklärung dieses Problems bei http://www.imagemagick.org/Usage/text/#overflow.
Ist es möglich, solche Textüberläufe zu erkennen und Text so zu zeichnen, wie wir es erwartet haben?
@Pekka, Ihre Methode funktioniert möglicherweise mit IM, aber es wird große Overhead erstellen, nicht nur Zuschneiden, sondern auch Größe angepasstes Bild anpassen, um in die angegebene Leinwand Dimension zu passen. Dies funktioniert nicht mit PIL. Es zeichnet immer obere Hälfte der oben genannten Schriftarten, auch wenn ich eine größere Leinwand erstelle. – jack
Versuchen Sie, den Befehl "label" vor den Befehlen trim und repage zu setzen, die funktionieren sollten. Der Overhead, ich kann nicht helfen. –