18

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.

1 Answer 1

23

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

Sign up to request clarification or add additional context in comments.

7 Comments

Yes, I just figured out that there are fonts which can cover many unicode glyphs. But what I really wanted to do was applying different fonts for different languages. (Best chosen font for each language) For now, I'm using ttfquery to check if each unicode's glyph is contained in a certain font or not. Thanks for your answer.
@dda Your example is exactly what I was looking for: there are even single font sets that cover multiple languages. But this one you've shown doesn't seem to come with most Linux distributions. Do you know of other fonts that have this much support?
I would suggest installing the Code 2000 font. en.wikipedia.org/wiki/Code2000
This worked for me straightaway in python-2.7 (anaconda). +n!
@uhoh happy to see a five year old answer still to be of help! ☺
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.