如何在Python的PIL ImageFont中指定本地化的CJK脚本形式?

问题描述

CJK脚本(CJK Unified Ideographs)具有相同的Unicode代码点,简体中文,繁体中文和日文汉字之间的区别只能由字体来处理。

某些字体同时支持几种本地化形式(简体中文,繁体中文,日文汉字等)。例如,Arial Unicode.ttflocl中有4个GSUB tablejpnkorzhszht CJK脚本的本地化形式。 jpn认值,它对应于汉字。

如何选择在Python中使用的本地化表单?更具体地说,我想在使用PIL package时控制本地化表单。

image_font = ImageFont.truetype(font="Arial Unicode.ttf",size=10) # PIL.ImageFont.FreeTypeFont object

使用PIL版本8.0.1甚至可以实现这种本地化的表单规范吗?

解决方法

最后我找到了解决方案。要在Python的PIL中指定CJK字符的形式,在languagelink)中指定ImageDraw.text()参数就足够了,它需要libraqm

以下示例显示了结果:

languages = ["","zh","zh-Hans","zh-CN","zh-TW","zh-HK"]
char_ = "骨"
font = ImageFont.truetype("Arial Unicode.ttf",size=32)
fig,axes = plt.subplots(nrows=2,ncols=3,figsize=(20,8))
axes = axes.ravel() 
for i,c in enumerate([char_] * len(languages)):
    img = Image.new("L",(64,64),255)
    draw = ImageDraw.Draw(img)
    if i == 0:
        draw.text((0,0),c,font=font)
    else:
        draw.text((0,font=font,language=languages[i])
    axes[i].imshow(img) 
    axes[i].set_title(languages[i] + " {}".format(ord(char_)))
plt.show() 

enter image description here