ImageMagick SVG到PNG没有着色

时间:2015-04-30 08:23:21

标签: linux svg imagemagick imagemagick-convert

我在Mac OS,Linux 64bit(2系统)和RedHat上安装了ImageMagick。

我有一个包含以下内容的简单SVG文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         width="100px" height="100px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100;" xml:space="preserve">
    <g>
        <rect x="15" y="15" style="fill:none;" width="70" height="70"/>
        <path d="M85,0H15H0v15v70v15h15h70h15V85V15V0H85z M85,85H15V15h70V85z"/>
    </g>
</svg>

当我在MAC OSX,RedHat甚至我的一个Linux设置上使用:

进行转换时
convert -fill 'rgb(255,0,0)' image.svg test.png

它正确转换文件,即它将颜色更改为红色。

但是,在其他Linux设置中,它不会着色,但仍保持黑色。

在我从源上安装ImageMagick的所有系统上。都有相同的版本。执行时全部给出"rsvg-convert" -o "%o" "%i"

convert -list delegate | grep 'svg => '

但我不知道为什么我的Linux设置之一无法正常运行。

2 个答案:

答案 0 :(得分:1)

-verbose添加到您的转换命令:

convert -verbose -fill 'rgba(255,0,0,0)' image.svg test.png

然后在每个系统上再次测试。比较每种情况的输出。

-verbose在终端输出中报告确切的委托命令行将在后台运行,以产生ImageMagick可以自行处理的最终格式。

例如,在我当前的系统(OSX Mavericks)上,因为我的设置与您的设置不同,我的转换不会填充到SVG中,我会在终端中看到这个:

"/opt/local/bin/inkscape" "/var/tmp/magick-31893m0w2-x4pHlPY" \
      --export-eps="/var/tmp/magick-31893y4-KtfXirywn" \
      --export-dpi="90,90" --export-background="rgb(100%,100%,100%)" \
      --export-background-opacity="1" > \
        "/var/tmp/magick-31893J8WlJy8Sn0uH" 2>&1
/var/tmp/magick-31893M9guCq3EvFL71 PNG 80x80 80x80+0+0 8-bit sRGB 351B 0.000u 0:00.000
/var/tmp/magick-31893y4-KtfXirywn PS 80x80 80x80+0+0 16-bit sRGB 351B 0.000u 0:00.000
img.svg=>/var/tmp/magick-31893y4-KtfXirywn PS 80x80 80x80+0+0 16-bit sRGB 351B 0.000u 0:00.000
img.svg=>out.png PS 80x80 80x80+0+0 8-bit sRGB 3c 463B 0.000u 0:00.000
[ghostscript library] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
        -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 \
       "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 \
       "-r72x72" -g80x80  "-sOutputFile=/var/tmp/magick-31893M9guCq3EvFL7%d" \
       "-f/var/tmp/magick-31893VjGeCPBsW7zN" \
       "-f/var/tmp/magick-31893OxqHgutvF5QZ"

正如您所看到的,在我的情况下,将Inkscape作为委托将SVG转换为EPS,然后使用Ghostscript将EPS转换为PNG(使用alpha通道)....

答案 1 :(得分:1)

试试这个:

convert -fill 'rgb(255,0,0)' MSVG:test.svg test.png

它使用ImageMagick自己的SVG内部渲染器MSVG,而不是RSVG库。更多信息:http://imagemagick.org/Usage/draw/#svg

但是,MSVG不是一个完整的SVG转换器,因此某些SVG文件可能无法正确呈现。