2012-07-10 13 views
8

Ho problemi a disegnare testo multilingue usando PIL. Diciamo che voglio disegnare il testo - "ひ ら が な - Hiragana, 히라가나". Ma la funzione ImageDraw.text() di PIL richiede un solo font alla volta, quindi non posso disegnare correttamente questo testo, perché richiede font inglesi, giapponesi e coreani tutti insieme.Disegno di testo multilingue con PIL

Finora, non ho avuto fortuna a trovare una soluzione semplice come il passaggio di più font a PIL, in modo che possa scegliere il carattere appropriato per ogni carattere Unicode (come fanno i moderni SDK o browser Web).

Quello che sto pensando è che dovrei scorrere su ciascun carattere e determinare quale font usare per ogni personaggio da solo. Ma non posso fare a meno di pensare che ci debba essere un modo più semplice per farlo.

Sto andando nella giusta direzione? Non c'è un modo più semplice?

PS) È consigliabile utilizzare un'altra lingua o un'altra libreria di imaging se esiste una soluzione molto migliore.

risposta

9

Hai solo bisogno di scegliere un font Unicode. Esempio:

import Image 
import ImageFont, ImageDraw 
image=Image.new("RGB",[320,320]) 
draw = ImageDraw.Draw(image) 
a=u"ひらがな - Hiragana, 히라가나" 
font=ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf",14) 
draw.text((50, 50), a, font=font) 
image.save("a.png") 

Outputs this

+1

Sì, ho appena capito che ci sono i caratteri che possono coprire molti glifi Unicode. Ma quello che volevo veramente era applicare diversi caratteri per lingue diverse. (Miglior font scelto per ogni lingua) Per ora, sto usando [ttfquery] (http://ttfquery.sourceforge.net/) per verificare se il glifo di ogni unicode è contenuto in un determinato font o meno. Grazie per la tua risposta. – redism

+0

Probabilmente potresti velocizzare le cose - se hai un sacco di testo da disegnare - estraendo famiglie linguistiche dalle tue stringhe e interrogando un personaggio per ogni famiglia linguistica. – dda

+0

Grazie per aver sottolineato ciò che non sapevo. :) – redism