使用PIL绘制多语言文本

18

我在使用 PIL 时遇到了绘制多语言文本的问题。假设我要绘制的文本是:"ひらがな - Hiragana, 히라가나"。但是 PIL 的 ImageDraw.text() 函数一次只能接受一个字体,因此我无法正确地绘制这段文本,因为它需要同时使用英文字体、日文字体和韩文字体。

到目前为止,我还没有找到像传递多个字体给 PIL 这样简单的解决方案,使其可以针对每个 Unicode 字符选择合适的字体(就像现代 SDK 或 Web 浏览器做的那样)。

我的想法是,我应该遍历每个字符,并自己确定要为每个字符使用哪种字体。但我不能不想着肯定有更简单的方法来解决这个问题。

我这样做对吗?难道没有更简单的方法吗?

附注:如果有更好的解决方案,可以使用其他语言或其他图像库。

1个回答

23

你只需要选择一个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")

输出结果


2
是的,我刚刚弄清楚有些字体可以覆盖许多Unicode字符。但我真正想做的是为不同的语言应用不同的字体(每种语言选择最佳字体)。现在,我正在使用 ttfquery 检查每个Unicode字符的字形是否包含在某个特定的字体中。感谢您的回答。 - redism
1
@dda,你的例子正是我所需要的:甚至有单一字体集可以涵盖多种语言。但是你展示的这个似乎并没有随着大多数Linux发行版一起提供。你知道其他具有如此多支持的字体吗? - john_science
1
我建议安装Code 2000字体。https://en.wikipedia.org/wiki/Code2000 - dda
1
这个对我来说在python-2.7(anaconda)中立刻起作用了。+n! - uhoh
2
很高兴看到一个五岁的回答仍然有帮助!☺ - dda
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接