2012-07-10 85 views
8

我无法绘制使用PIL多语言文本多语言文本。假设我想画出文字 - “ひらがな - 平假名,히라가나”。但是PIL的ImageDraw.text()函数一次只接受一种字体,所以我无法正确绘制这些文本,因为它需要将英文,日文和韩文字体放在一起。绘图使用PIL

到目前为止,我没有运气找到像通过多种字体PIL,以便它可以为每个Unicode字符相应的字体(像现代SDK或web浏览器做的)一个简单的解决方案。

我在想什么就是,我应该遍历每个字符,并确定使用我自己的每个字符的字体。但我不禁想到必须有一个更简单的方法来做到这一点。

我正朝着正确的方向走吗?没有更简单的方法吗?

PS),这是确定要使用其它语言或其它图像库中,如果有一个更好的解决方案。

回答

9

你只需要选择一个Unicode字体。例如:

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

是的,我只是想通了,有哪些可以覆盖很多的unicode字形字体。但我真正想做的是为不同的语言应用不同的字体。 (为每种语言选择最好的字体)现在,我使用[ttfquery](http://ttfquery.sourceforge.net/)来检查每个unicode的字形是否包含在某种字体中。感谢您的回答。 – redism 2012-07-13 07:28:12

+0

通过从字符串中提取语言族并查询每个语言族的一个字符,您大概可以加快速度 - 如果您有很多要绘制的文本。 – dda 2012-07-13 08:37:32

+0

谢谢你指出我不知道的东西。 :) – redism 2012-07-18 01:19:37