使用ImageMagick转换特殊字符

3

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

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

其他特殊字符则不那么简单。

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字符,包括 \@

是否已知如何使用ImageMagick将它们转换为PNG文件?


你应该先将 label:"\" 替换为 label:" \ "(注意添加空格!)。同时,将 label:"@" 替换为 label:" @ " - Kurt Pfeifle
是的,那会起作用。我认为在我的脚本中,最好的解决方案是使用@来指定一个只包含单个Unicode字符的文件。我现在才发现@的含义,因为我发布到了ImageMagick开发者论坛。我在下面对你的答案发表了另一个评论。你的解决方案虽然有效,但会导致更宽的图像,这可能不是我想要的,因为我打算将输出用于OpenGL ES中的纹理映射文本。非常感谢你的发布,非常感激。 - Eae
1个回答

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

好的,如果这也涉及到\@字符,那么这个应该不会有问题。这让我想到了...

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

这是我在Mac OS X Mavericks 10.9系统上使用ImageMagick v6.9.0-0得到的结果:

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

使用 '@' 和 <code>\</code> 的示例

并且(注意开头和结尾的空格):

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

输入图像描述

如果您需要从由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

(注:@-语法只是告诉convert从标准输入中读取标签的输入字符串...)
(图片已省略)

我喜欢你的回答并已投票。在我的情况下,我认为答案可能是将要转换的字符放入一个文件中,并使用参数label:@mychartoconver.txt。我还没有尝试过,但这是ImageMagick论坛中的开发人员所说的。在您的示例中,您正在转换多个字符的字符串,而我正在转换单个字符。他们告诉我,在标签参数的情况下,“@”用于指定文件,不能用于指定“@” Unicode字符。 - Eae
如果重心确实将整个字符串居中并将多余部分裁剪到指定的图像大小,则您的方法非常好,我应该接受您的方法作为答案,但我刚刚发现了另一种替代方法,我已经在其他评论中谈到过。 - Eae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接