【问题标题】:Converting special characters with ImageMagick使用 ImageMagick 转换特殊字符
【发布时间】:2015-07-10 22:17:14
【问题描述】:

我正在使用 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:" @ "
  • 可以的。我认为就我的脚本而言,最好的解决方案是使用 @ 来指定一个内部包含单个 Unicode 字符的文件。当我发布到 ImageMagick 开发者论坛时,我现在才知道@ 的含义。我在下面对您的回答发表了另一条评论。您的解决方案有效,但是它将导致更宽的图像,这可能不是我想要发生的,因为我打算将输出用于 OpenGL ES 中的纹理映射文本。感谢您发布它非常感谢。

标签: imagemagick imagemagick-convert


【解决方案1】:

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

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

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

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

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

和(注意我的字符串开头和结尾的空格!):

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 从标准输入中读取标签的输入字符串...)

【讨论】:

  • 我喜欢你的回答,我投票了。我认为在我的情况下,答案可能是将要转换的字符放在文件中并使用参数标签:@mychartoconver.txt。我还没有尝试过,但这就是 ImageMagick 论坛中的开发人员所说的。在您的示例中,您正在转换一个由多个字符组成的字符串,而我正在转换一个字符。他们告诉我标签的情况下的@:参数是指定一个文件,不能用于指定@unicode字符。
  • 如果重心确实使整个字符串居中并将多余的部分剪辑到指定的图像大小,那么您的方式非常好,我可能应该接受您的方式作为答案,但还有一个替代方案我只是发现了我在其他 cmets 中谈到的内容。
  • 我认为正确的做法是链接到这个 then:imagemagick.org/discourse-server/… 并标记答案
猜你喜欢
  • 2012-07-10
  • 2013-10-03
  • 1970-01-01
  • 2022-07-10
  • 2019-08-02
  • 2011-11-17
  • 2019-11-04
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多