使用 PIL 绘制多语言文本

Posted

技术标签:

【中文标题】使用 PIL 绘制多语言文本【英文标题】:Drawing multilingual text using PIL 【发布时间】:2012-07-09 20:05:12 【问题描述】:

我在时遇到问题。假设我要绘制文本 - “ひらがな - 平假名,히라가나”。但是 PIL 的 ImageDraw.text() 函数一次只需要一种字体,所以我无法正确绘制此文本,因为它需要同时使用英文、日文和韩文字体。

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

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

是的,我刚刚发现有些字体可以覆盖许多 unicode 字形。但我真正想做的是为不同的语言应用不同的字体。 (每种语言的最佳选择字体)现在,我使用ttfquery 检查每个 unicode 的字形是否包含在某种字体中。感谢您的回答。 @dda 您的示例正是我想要的:甚至有涵盖多种语言的单一字体集。但是你展示的这个似乎并没有随大多数 Linux 发行版一起提供。你知道其他有这么多支持的字体吗? 我建议安装 Code 2000 字体。 en.wikipedia.org/wiki/Code2000 这在 python-2.7 (anaconda) 中直接为我工作。 +n! @uhoh 很高兴看到一个五年前的答案仍然有帮助! ☺

以上是关于使用 PIL 绘制多语言文本的主要内容,如果未能解决你的问题,请参考以下文章

QML程序实现动态切换多语言(ListModel/ListElement中的文本的多语言处理)

NSIS多语言

分段多语言并行文本

我可以在textView中添加多语言吗?

[Abp 源码分析]多语言(本地化)处理

ExtJS - 带有 i18n 文本的多语言