linux - ImageMagick SVG 到 PNG 不着色

标签 linux svg imagemagick imagemagick-convert

我在我的 Mac 操作系统、Linux 64 位(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 设置不能像预期的那样工作。

最佳答案

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

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

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

-verbose 在终端输出中报告哪个确切的 delegate 命令行将在后台运行以产生 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 channel )......

关于linux - ImageMagick SVG 到 PNG 不着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29962624/

相关文章:

php - 在 php 中格式化 linux 命令输出

linux - 我在哪里可以获得 fsck 代码?

html - 在移动设备上调整 SVG 的大小

php - 在imagemagick中从png到jpg的透明背景

linux - 如何检测ftp连接

linux - 在 Go 中设置进程名称(如 `ps` 所示)

javascript - 将 HTML 控件从一个页面移动到另一页面

javascript - 悬停时修改 SVG 路径

image-processing - 获取类似于 ImageMagick 输出的感知差异输出图像

bash - 改进使用 ImageMagick 将 TIFF 批量转换为 PNG 并重新采样的流程