Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Drawing multilingual text using PIL

I'm having trouble drawing multilingual text using PIL. Let's say I want to draw text - "ひらがな - Hiragana, 히라가나". But PIL's ImageDraw.text() function takes only one font at a time, so I cannot draw this text correctly, because it requires English, Japanese, and Korean fonts all together.

So far, I had no luck finding a simple solution like passing multiple fonts to PIL, so that it can choose appropriate font for each Unicode character (Like modern SDK or web browsers do).

What I'm thinking is, I should iterate over each character, and determine which font to use for each character by myself. But I can't help thinking that there must be an easier way to do this.

Am I going in the right direction? Isn't there an easier way?

PS) It's OK to use another language or another imaging library if there's a much better solution.

like image 746
redism Avatar asked Jul 10 '12 10:07

redism


1 Answers

You just need to pick a Unicode font. Example:

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

like image 180
dda Avatar answered Oct 13 '22 16:10

dda