Unicode-Texte auf Grafiken mit der PIL (Python Imaging Library)

14.01.2013 20:17
ca. eine Minute Lesezeit

Da ich letzte Woche darüber gestolpert bin, wollte ich es zumindest kurz niederschreiben: Ich musste einen Text mit Umlauten aus Usereingaben in einer speziellen Schriftart auf ein Bild positionieren. Da das Projekt auf Googles App Engine laufen sollte, war es natürlich in Python 2.7 geschrieben. Hier als mein erster Test:

from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

img = Image.open('background.png')
font = ImageFont.truetype('indieflower.ttf', 18)
image_text = u"àäöüß"
drawer = ImageDraw.Draw(img)
drawer.text((0, 0), image_text, fill=(0, 0, 0), font=font)
img.save('myimage.png')

Dies produziert direkt einen Fehler:

UnicodeEncodeError: 'ascii' codec can't encode character
u'\xe0' in position 0: ordinal not in range(128)

Problem: Die Schriftart ist nicht Unicode-fähig. Allerdings waren ja im Design in genau dieser Schriftart auch Umlaute und Sonderzeichen drin, also muss der Font das ja irgendwie unterstützen.

Die Lösung: Das Windows-Standard-Encoding windows-1252:

image_text = u"àäöüß".encode('windows-1252')

Und schon war nahezu jede Schriftart mit jedem Text möglich und hat mich ca. eine halbe Stunde Research gekostet.


Hier gibt es keinen Kommentarbereich. Hast du etwas zu kommentieren? Dann blogge einfach selbst. Oder schreib darüber mit deinem Kommentar in einem sozialen Netzwerk deiner Wahl.