使用PIL绘制多语言文本

red*_*ism 13 unicode fonts imaging cjk python-imaging-library

我在使用PIL绘制多语言文本时遇到问题.让我们说我想画文字 - "ひらがな - 平假名,히라가나".但是PIL的ImageDraw.text()函数一次只能使用一种字体,因此我无法正确绘制该文本,因为它需要英文,日文和韩文字体.

到目前为止,我没有找到一个简单的解决方案,比如将多个字体传递给PIL,这样它就可以为每个Unicode字符选择合适的字体(就像现代SDK或Web浏览器一样).

我在想的是,我应该遍历每个角色,并确定自己为每个角色使用哪种字体.但我不禁想到必须有一个更简单的方法来做到这一点.

我正朝着正确的方向前进吗?是不是有更简单的方法?

PS)如果有更好的解决方案,可以使用其他语言或其他成像库.

dda*_*dda 16

您只需要选择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")
Run Code Online (Sandbox Code Playgroud)

输出这个

  • 是的,我刚刚发现有些字体可以覆盖许多 unicode 字形。但我真正想做的是为不同的语言应用不同的字体。(每种语言的最佳选择字体)目前,我使用 [ttfquery](http://ttfquery.sourceforge.net/) 来检查每个 unicode 的字形是否包含在某种字体中。感谢您的回答。 (2认同)
  • @uhoh很高兴看到一个五岁的答案仍然有帮助!☺ (2认同)