下面的代码没有集中文本代码中没有错误,但我想集中文本。
import os
unicode_text = u"\u0627\u0628\u067E"
list_of_letters = list (unicode_text)
char = u''.join(word)
t1 = arabic_reshaper.reshape(char)
W,H= (32, 32)
img= PIL.Image.new('RGBA', (W, H), (255, 255, 255),)
draw = PIL.ImageDraw.Draw(img)
font = PIL.ImageFont.truetype( r"C:\Downloads\arabic.ttf", 15)
t2 = get_display(t1)
w, h = draw.textsize(t2.encode('utf-8'))
draw.text(((W-w)/2,(H-h)/2), t2, fill="#000000", font=font)
答案 0 :(得分:0)
您的代码无法正确居中,因为它无法检索实际字符的宽度和高度。如果打印出textsize
返回的字符大小,然后更改字体大小,则可以看到。你仍然可以得到相同的字符大小!
为什么不改变?因为你加载了一个字体但是没有使用进行测量。如果您在draw
对象中设置它,或者将font=font
添加到draw.textsize
和 draw.text
,它会按预期工作。
(这样做会导致原始textsize
行出错;可能您尝试通过添加.encode('utf8)
以不相关的方式解决问题。但这不是必需的。)
draw = PIL.ImageDraw.Draw(img)
draw.font = PIL.ImageFont.truetype( "times.ttf", 48)
t2 = get_display(t1)
w, h = draw.textsize(t2)
draw.text(((W-w)/2,(H-h)/2), t2, fill="#000000")
print ("char: %04X w %d h %d" % (ord(char),w,h))
这导致整个字符正确居中,拉丁字母和阿拉伯字母都相同。