[Image-SIG] Putting a unicode string on an ImageDraw canvas

Fredrik Lundh fredrik at pythonware.com
Mon Jan 10 14:27:34 CET 2011


2011/1/10 Thomas Larsen Wessel <mrvelle at gmail.com>:
> People are telling me that PIL supports unicode strings, does it? And if
> yes, why does the following not work:
>
> import ImageFont, Image, ImageDraw
> s = u'\u0623\u0636\u0641'
> im = Image.new('RGB', (200,200))
> draw = ImageDraw.Draw(im)
> draw.text((40,40), s) #fails
>
> It results in the following exception:
>
> Traceback (most recent call last):
>   File "buffer.py", line 9, in <module>
>     draw.text((40,40), s) #fails
>   File "/usr/lib/python2.6/dist-packages/PIL/ImageDraw.py", line 267, in
> text
>     mask = font.getmask(text, self.fontmode)
> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2:
> ordinal not in range(128)
>
> So how, do I put this unicode string on the canvas?

You'll need a font that supports Unicode, which the crappy default
bitmap font doesn't.  Use the ImageFont module to load a suitable
TrueType font.

</F>


More information about the Image-SIG mailing list