Io uso i seguenti due metodi per generare il testo anteprima immagine per un file di font TTFGetize() di ImageFont non ottiene la dimensione corretta del testo?
metodo 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 metodo:
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
Entrambi i metodi creare le immagini di anteprima corrette la maggior parte del tempo, ma in alcuni rari casi (< 2%), il font.getsize (testo) è solo cann Ot ottenere la dimensione corretta del testo che risulta in testo fornito overflow di tela. ImageMagick ha lo stesso problema.
font di esempio e anteprime:
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
Ho esaminato le documentazioni di ImageMagick e ha trovato la spiegazione di questo problema a http://www.imagemagick.org/Usage/text/#overflow.
È possibile rilevare tale testo in eccesso e disegnare il testo per adattarlo alla tela come previsto?
@Pekka, il metodo può opere con IM, ma si creerà grande testa, non solo tagliare, ma anche il ridimensionamento dell'immagine ritagliata per adattarsi a dimensioni di tela specificato. Questo non funziona con PIL. Disegna sempre la metà superiore dei caratteri sopra anche se creo una tela più grande. – jack
Prova a mettere il comando "label" * prima * dei comandi trim e repage, che dovrebbe funzionare. L'overhead, non posso aiutare. –