我在Python中使用PIL編寫了一些代碼,它將UTF-8字符打印到圖像上。將雙向文本打印到圖像
我注意到,對於加盟的雙向腳本(如阿拉伯語),同樣的代碼無法字符正確連接(最初的形式僅是選擇,中間和最終的形式不被利用)
誰能推薦一個方法或解決這個問題的技巧?
我在Python中使用PIL編寫了一些代碼,它將UTF-8字符打印到圖像上。將雙向文本打印到圖像
我注意到,對於加盟的雙向腳本(如阿拉伯語),同樣的代碼無法字符正確連接(最初的形式僅是選擇,中間和最終的形式不被利用)
誰能推薦一個方法或解決這個問題的技巧?
如果你想使用PIL保留,使用pyarabicshaping
與pybidi
或者你可能要考慮切換到pangocairo
這對於文本整形使用HarfBuzz
。
我做了以下事情:Python + Wand(Python Lib)+ arabic_reshaper(Python Lib)+ bidi.algorithme(Python Lib)。這同樣適用於PIL /枕頭,您需要使用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)
我剛剛有了一個快速瀏覽一下他們的網站,並我的猜測是圖書館沒有能力正確處理BIDI。如果他們這樣做,他們當然不會做廣告。 – 2012-12-10 05:53:48
是[this](http://pypi.python.org/pypi/python-bidi/)的任何幫助? – 2012-12-10 05:55:37