如何将Unicode字符参数传递给ImageMagick?
假设“▣”这个字符在某个字体文件(somefont.ttf)的字形表里。
char = unichr(9635)
subprocess.call(['convert', '-font', 'somefont.ttf', '-size', '50x50', '-label:%s' % char, 'output.png'])
subprocess.call(['convert', '-font', 'somefont.ttf', '-size', '50x50', ('-label:%s' % char).encode('utf-8'), 'output.png'])
这两段代码都创建了一个空白的图像,上面没有“▣”这个字符。上面的代码是正确的吗?还是说问题出在ImageMagick上,它没有捕捉到某些范围内的标签?
使用ImageMagick来绘制文本的原因是,它比PIL更灵活,可以把文本调整和对齐到特定的图像大小。
编辑:
根据yuku的建议,我尝试了以下方法:
root@host:~@convert -font somefont.ttf -size 50x65 label:▣ output.png
root@host:~@convert -font somefont.ttf -size 50x65 label:'▣' output.png
这两种方法的输出都是一个问号,而不是正确的字符。
2 个回答
1
根据这个链接,你需要使用UTF8格式来传递文本。这样才能正确显示那些不在ASCII范围内的字符。
0
- 试着在你的控制台里手动用ASCII标签来让它工作。
$ convert -font somefont.ttf -size 50x50 -label:A output.png convert: unrecognized option `-label:A' @ convert.c/ConvertImageCommand/1753. 1 ;( $ convert -font somefont.ttf -size 50x50 -label A output.png convert: missing an image filename `output.png' @ convert.c/ConvertImageComm\ and/2775. 1 ;(
用
subprocess.check_call
替代os.system
。import subprocess if __name__=="__main__": cmd = 'convert -font somefont.ttf -size 50x50'.split() #XXX command arguments are invalid subprocess.check_call(cmd + ['-label', unichr(9635), 'output.png'])