【问题标题】:Convert svg to png imagemagick black border around path将svg转换为png imagemagick路径周围的黑色边框
【发布时间】:2019-03-27 04:02:25
【问题描述】:

我正在使用 macOS Mojave 10.14.3 (18D109)

我的 imagemagick 详细信息(随 brew 安装)

convert -version
Version: ImageMagick 7.0.8-35 Q16 x86_64 2019-03-25 https://imagemagick.org
Copyright: © 1999-2019 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP 
Delegates (built-in): bzlib freetype heic jng jp2 jpeg lcms ltdl lzma openexr png tiff webp xml zlib

我有一个基本的 svg(取自 W3Schools 示例):

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" width="52" height="52" viewBox="0 0 52 52">
  <path fill="#fff" d="M22 0 L33 52 L12 42 Z">
</path>
</svg>

看起来像这样(加普林):

现在当我像这样将它转换为 png 时:

convert -background none -density 9600 -resize 32x "myFile.svg" "myFile.png"

我得到了一个完美的图像,除了它有一个黑色的边框:

我尝试了几乎所有与 colorblack 有关的 imagemagick 命令选项的变体,遗憾的是它从来没有像我想要的那样出现 - 透明背景,纯白色路径(如填充所描述的SVG)。

有什么建议吗?

【问题讨论】:

    标签: svg imagemagick


    【解决方案1】:

    在 ImageMagick 中,SVG 文件可以通过以下三种工具中的任何一种来呈现:Imagemagick 的 MSVG/XML、RSVG 委托和 Inkscape,通常按照提高准确性的顺序。

    我刚刚使用 Inkscape 0.92.4 尝试了以下命令,结果完全是白色的。如果安装了 Inkscape,Imagemagick 将自动使用它。但在这种情况下,它不适用于该文件。

    magick test.svg test2.png
    


    但如果我添加 -background none 效果很好

    magick -background none test.svg test2.png
    


    我在透明背景上得到一个白色三角形。

    或者如果我想要黑色背景

    magick -background black test.svg test2.png
    


    当我强制 Imagemagick 使用 MSVG 时,我得到一个白色三角形,白色背景上有一个简单的黑色轮廓。因此,您的 cmets 再次不正确。

    magick MSVG:test.svg test2.png
    


    如果我添加 -background none,那么我会在透明背景上得到带有黑色轮廓的白色三角形。

    magick -background none MSVG:test.svg test2.png
    


    但是如果我只想要黑色背景,那么

    magick -background black MSVG:test.svg test2.png
    


    然后我在黑色背景上得到一个白色三角形。但我怀疑白色三角形比它的黑色边框略小。

    当我通过在 delegates.xml 文件中创建一个条目来强制使用 RSVG 2.44.12 时,我会在透明背景上看到一个白色三角形,我认为这就是您想要的。

    magick RSVG:test.svg test3.png
    


    magick -background none RSVG:test.svg test3.png
    


    您可以通过

    判断您的 Imagemagick 是否具有 MSVG/XML 或 RSVG
    magick -list format
    


    并寻找以 SVG 开头的行。在该行的末尾,它将显示 XML 或 RSVG。你不能用这种方法来了解 Inkscape。

    查看您使用的 SVG 渲染器及其版本。还有 libpng 的版本。我的是 1.6.36

    根据您的版本信息,我没有看到列出的 rsvp。所以我假设你使用的是 MSVG,但如果你在系统上安装了它,它可能是 Inkscape。

    我在 Mac OSX Sierra 上使用 Imagemagick 7.0.8.35 Q16。

    【讨论】:

    • 所以运行magick -list format | grep SVG 我得到``` MSVG SVG rw+ ImageMagick 自己的 SVG 内部渲染器 SVG SVG rw+ 可缩放矢量图形 (XML 2.9.4) SVGZ SVG rw+ 压缩可缩放矢量图形 (XML 2.9.4 )``` 我还没有安装 InkScape。我试过brew install librsvg,但这并没有将RSVG添加到magick格式中:(
    • 您必须使用 Imagemagick 安装 librsvg。因此,您可能需要重新安装两者。但我不是 Homebrew 的专家。因此,请咨询他们或其他人。但是,如果您安装了 Inkscape,那么 Imagemagick 将自动使用它。您不必像使用委托一样再次安装 Imagemagick。
    【解决方案2】:

    我在使用 PHP 将 SVG 转换为 PNG 时遇到了这个问题 - 路径周围有黑线。我在处理图像的服务器上安装了 Inkscape,似乎可以修复它,无需更改代码。

    【讨论】:

      猜你喜欢
      • 2015-11-18
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2012-04-08
      相关资源
      最近更新 更多