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

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

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

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

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

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

【问题讨论】:

    标签: unicode fonts python-imaging-library cjk imaging


    【解决方案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 很高兴看到一个五年前的答案仍然有帮助! ☺
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-10
    • 2011-12-03
    • 2017-03-31
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多