Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 图像输出中的文本集中错误_Numpy_Opencv_Unicode_Python Imaging Library_Python 3.5 - Fatal编程技术网

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))