2015-07-10 118 views
1

我正在使用PowerShell脚本将Unicode字符批量转换为PNG文件。见http://pastebin.com/aGJzk4Hh使用ImageMagick转换特殊字符

我能弄清楚要转换"字符必须使用指定标签:\"

其他特殊字符并非如此简单。

C:\ImageMagick\convert.exe -background transparent -fill hsb(0,0,0) \ 
    -font Arial -pointsize 18 -size 18x26 -gravity center label:"@" \ 
    C:\Users\erics_000\Desktop\Output\Chars\40.png 

convert.exe: UnableToAccessPath @ error/property.c/InterpretImageProperties/3330. 
convert.exe: NoImagesDefined `C:\Users\erics_000\Desktop\Output\Chars\40.png' @ error/convert.c/ConvertImageCommand/3230. 

还有:

C:\ImageMagick\convert.exe -background transparent -fill hsb(0,0,0) \ 
    -font Arial -pointsize 18 -size 18x26 -gravity center label:"\" \ 
    C:\Users\erics_000\Desktop\Output\Chars\5C.png 

convert.exe: NoImagesDefined `label:" C:\Users\erics_000\Desktop\Output\Chars\5C.png' @ error/convert.c/ConvertImageCommand/3230. 

已经很成问题对我来说。

我已经想尽办法,我知道如何通过的但是没有\但已被证明的工作方式来逃避这些字符。我需要能够转换所有Unicode字符,包括\@

是它知道如何这些可以被转换成PNG文件与ImageMagick的?

+0

您应该更换'标签开始:用'标签 “\”': “\”'(注意添加空格)。也可以用'label:“@”'替换'label:“@”' –

+0

是的,这是行得通的。我认为对于我的脚本来说,最好的解决方案是使用@来指定一个带有单个Unicode字符的文件。我刚刚发现@表示我发布到ImageMagick开发人员论坛时的含义。我在下面的回复中发表了另一条评论。但是,您的解决方案可以正常工作,但它会导致更广泛的图像,并且可能不是我想要发生的情况,因为我打算在OpenGL ES中使用纹理映射文本的输出。感谢您发布它是不胜感激。 – Giuseppe

回答

3

第一个问题:您是否检查过您的Arial版本是否包含Unicode字符的字形?

好的,如果它也是关于\@的字符,那么应该不会造成问题。这导致我...

第二个问题:你安装了哪个版本的ImageMagick?你能报告convert -version的结果吗?

这里是结果与ImageMagick的v6.9.0-0在Mac OS X 10.9小牛系统上:(!注意空白开始和结束我的字符串)

convert -background black -fill red -pointsize 96 label:' @ \\ @ \\ @ ' sample.png 

sample using '@' and <code>\</code>

和:

convert -background transparent -fill hsb\(0,0,0\) -font Arial \ 
     -pointsize 180 -size 190x210 -gravity center label:' @ ' \ 
     -frame 1 \ 
     sample2.png 

enter image description here

如果您需要从包含Unicode字符代码的输入中发出真正的Unicode字形,可以在Perl的帮助下完成此操作。我想,PowerShell还具有这样的方法,但我不熟悉):

perl -e 'binmode(STDOUT, ":utf8"); \ 
     print " Smiley: \x{263A} "' \ 
    | convert -background black \ 
       -fill red   \ 
       -pointsize 98  \ 
       -font Menlo   \ 
       label:@-   \ 
       smiley.png 

(注:@-语法只是告诉转换为读取从标准输入标签输入字符串... )

smiley.png

+0

我喜欢你的答案,我投了票。我认为在我的情况下,答案可能是将字符转换为文件并使用参数标签:@ mychartoconver.txt。我还没有尝试过,但ImageMagick论坛的开发人员正在说这些。在你的例子中,你正在转换多个字符的字符串,我正在转换一个字符。他们告诉我@在标签的情况下:参数是指定一个文件,不能用于指定@ unicode字符。 – Giuseppe

+0

如果重心真正将整个弦线居中,并将多余部分剪切到指定的图像大小,那么你的方式非常好,我应该接受你的方式作为答案,但也有一个替代方案,我刚刚发现我谈到了关于我的其他评论。 – Giuseppe

+0

我认为正确的做法是链接到此:http://www.imagemagick.org/discourse-server/viewtopic.php?f = 2&t = 28021&view = unread&sid = 8a8dfa72940017c4562bc69bb5286b42#未读并标记答案 – Giuseppe