如何将unicode char参数传递给ImageMagick?

时间:2009-11-29 12:44:33

标签: python unicode

假设“▣”的字符在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 个答案:

答案 0 :(得分:1)

根据this link,您需要传递以UTF8编码的文本。 它将能够在ASCII范围之外绘制正确的字符。

答案 1 :(得分:0)

  1. 尝试在控制台中使用ASCII标签手动操作。
  2.     $ 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'])