如何将Unicode字符参数传递给ImageMagick?

0 投票
2 回答
1956 浏览
提问于 2025-04-15 16:29

假设“▣”这个字符在某个字体文件(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
  1. 试着在你的控制台里手动用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 ;( 
  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'])
    

撰写回答