Numpy 图像输出中的文本集中错误
下面的代码不是集中文本代码中没有错误,但我想集中文本Numpy 图像输出中的文本集中错误,numpy,opencv,unicode,python-imaging-library,python-3.5,Numpy,Opencv,Unicode,Python Imaging Library,Python 3.5,下面的代码不是集中文本代码中没有错误,但我想集中文本 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,
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)
您的代码没有正确居中,因为它没有检索到实际的字符宽度和高度。您可以看到,如果打印出
textsize
返回的字符大小,然后更改字体大小。您仍然可以获得相同的字符大小
为什么它没有改变?因为你加载了一个字体,但是没有用它来测量。如果将其设置在draw
对象内,或将font=font
添加到draw.textsize
和draw.text
中,则其工作正常
(这样做会在原始的textsize
行上出现错误;您可能试图通过添加.encode('utf8)
)以不相关的方式解决此问题,但这不是必需的。)
这将导致整个字符正确居中,拉丁字母和阿拉伯字母都是如此
这对我来说很适合使用常规字符,所以这里的其他函数也出现了一些问题;还要注意,您在@usr2564301提到的字符之前添加了一个空格。
draw.textsize()
的输出有意义吗?@usr2564301请检查我现在编辑的代码。感谢您不仅解决了我的问题,而且详细阐述了它。
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))