2012-07-10 19 views
8

Ich habe Probleme beim Zeichnen mehrsprachigen Text mit PIL. Sagen wir, ich möchte einen Text zeichnen - "ひ ら が な - Hiragana, 히라가나". Aber die ImageDraw.text() -Funktion von PIL nimmt immer nur eine Schriftart nach der anderen, daher kann ich diesen Text nicht korrekt zeichnen, da er alle englischen, japanischen und koreanischen Schriften benötigt.Zeichnen mehrsprachigen Text mit PIL

Bislang hatte ich kein Glück, eine einfache Lösung wie die Übergabe mehrerer Schriften an PIL zu finden, so dass es für jedes Unicode-Zeichen die passende Schriftart auswählen kann (wie moderne SDK oder Webbrowser).

Was ich denke ist, ich sollte über jedes Zeichen iterieren, und bestimmen, welche Schriftart für jeden Charakter allein zu verwenden. Aber ich kann nicht umhin zu denken, dass es einen einfacheren Weg geben muss, dies zu tun.

Gehe ich in die richtige Richtung? Gibt es keinen einfacheren Weg?

PS) Es ist in Ordnung, eine andere Sprache oder eine andere Bildgebungsbibliothek zu verwenden, wenn es eine viel bessere Lösung gibt.

Antwort

9

Sie müssen nur eine Unicode-Schriftart auswählen. Beispiel:

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

Ja, ich dachte nur, dass es sind Schriften, die viele Unicode Glyphen abdecken kann. Aber ich wollte wirklich verschiedene Schriftarten für verschiedene Sprachen anwenden. (Am besten gewählte Schriftart für jede Sprache) Im Moment verwende ich [ttfquery] (http://ttfquery.sourceforge.net/), um zu prüfen, ob das Glyphe eines jeden Unicode in einer bestimmten Schriftart enthalten ist oder nicht. Danke für deine Antwort. – redism

+0

Sie könnten die Dinge wahrscheinlich beschleunigen, wenn Sie viel Text zeichnen müssen, indem Sie Sprachfamilien aus Ihren Strings extrahieren und für jede Sprachfamilie einen Buchstaben abfragen. – dda

+0

Danke, dass Sie auf das hingewiesen haben, was ich nicht wusste. :) – redism

Verwandte Themen