我使用PIL在Python中有一些代码,它会将UTF-8字符打印到图像中。
我注意到,为了加入像阿拉伯语这样的Bidi脚本,相同的代码无法正确连接字符(只选择初始表格,不使用中间和最终表格)
有人可以推荐一种方法或技术来解决这个问题吗?
答案 0 :(得分:1)
如果您想继续使用PIL,请将pyarabicshaping
与pybidi
一起使用,或者您可能需要考虑切换到使用pangocairo
进行文字整形的HarfBuzz
。
答案 1 :(得分:0)
我所做的是以下内容:Python + Wand (Python Lib)+ arabic_reshaper(Python Lib)+ bidi.algorithme(Python Lib)。这同样适用于 PIL / Pillow ,您需要使用arabic_reshaper
和bidi.algorithm
并将生成的文本传递给draw.text((10, 25), artext, font=font)
:
from wand.image import Image as wImage
from wand.display import display as wdiplay
from wand.drawing import Drawing
from wand.color import Color
import arabic_reshaper
from bidi.algorithm import get_display
reshaped_text = arabic_reshaper.reshape(u'لغةٌ عربيّة')
artext = get_display(reshaped_text)
fonts = ['C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\DroidNaskh-Bold.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Bold-Oblique.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Bold.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\Thabit-Oblique.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\majalla.ttf',
'C:\\Users\\PATH\\TO\\FONT\\Thabit-0.02\\majallab.ttf',
]
draw = Drawing()
img = wImage(width=1200,height=(len(fonts)+2)*60,background=Color('#ffffff'))
#draw.fill_color(Color('#000000'))
draw.text_alignment = 'right';
draw.text_antialias = True
draw.text_encoding = 'utf-8'
#draw.text_interline_spacing = 1
#draw.text_interword_spacing = 15.0
draw.text_kerning = 0.0
for i in range(len(fonts)):
font = fonts[i]
draw.font = font
draw.font_size = 40
draw.text(img.width / 2, 40+(i*60),artext)
print draw.get_font_metrics(img,artext)
draw(img)
draw.text(img.width / 2, 40+((i+1)*60),u'ناصر test')
draw(img)
img.save(filename='C:\\PATH\\OUTPUT\\arabictest.png'.format(r))
wdiplay(img)