我需要能够在python中呈现不同字体的文本,并使用各种使用变量替换字符(阿拉伯语、印地语、孟加拉语)的书写系统。在以前的一台机器上,我这样做没有问题,但我刚搬到一台新机器上,使用相同的conda环境,它无法工作。
Mac 12.6 Python版本3.9.13 Libraqm版本0.9.0 (与brew一起安装)枕头版本9.2.0 (随pip安装)
下面是一个最小的可重复的例子。它应该生成乌尔都语单词لڑكا--这两组字母都附在لڑكا之后,而是产生了类似于اکڑل的东西,每个字母都断开了连接。它正确地呈现了特定的字体,所以它不是没有找到字体的问题。当我运行最后几行代码检查'raqm‘功能时,我就会出错。
from PIL import ImageFont
from PIL import ImageDraw
from PIL import Image
font = ImageFont.truetype('KawkabMono-Bold.ttf',12,layout_engine=ImageFont.Layout.RAQM)
img = Image.new('1', (200, 100), 'white')
d = ImageDraw.Draw(img)
d.text((100,50), 'لڑكا', fill='black', font=font)
img.save('test.png')
from PIL import features
features.check_feature(feature='raqm')
我尝试过安装和重新安装几次,并从不同的来源构建。我的猜测是libraqm不是在枕头的正确路径上,但我不知道如何检查或修复它。
我试着运行最小可再现的文本,并期望看到一个正确的渲染,RTL文本与正确的文本呈现。相反,我得到了一个图像文件的文本呈现左向右和断开连接.
发布于 2022-11-29 03:30:18
在MacOS12.6.1和Python3.10.8系统解释器上,我能够让libraqm与Pillow一起工作。配置如下:
首先,我尝试使用python,然后得到了UserWarning: Raqm layout was requested, but Raqm is not available. Falling back to basic layout.
。
接下来,我在您发布的代码中添加了以下内容:print(features.check("raqm"))
并按预期打印False。
我使用了我的Python系统解释器(3.10.8),安装了Pillow,并且我能够用Pillow加载libraqm。
我添加了一个字体目录,并在上面的代码段中指定了字体。我用以下代码加载了字体:
features.check_feature(feature='raqm')
print(features.check("raqm"))
custom_font = os.path.abspath(
os.path.join(
os.path.dirname(__file__), 'fonts/KawkabMono-Bold.ttf'
)
)
如果python解释器没有加载library you库,那么您的输出将像您描述的那样(单个字符)。
发布于 2022-11-30 12:55:07
我认为您还需要在PIL/Pillow之前安装fribidi
和harfbuzz
:
brew install fribidi harfbuzz
请注意,您可以通过以下方式获得PIL/Pillow的配置、构建设置、特性和支持的格式:
python3 -m PIL
https://stackoverflow.com/questions/74608140
复制相似问题