【问题标题】:SVG to PNG Conversion with ImageMagick doesn't handle defs?使用 ImageMagick 的 SVG 到 PNG 转换不处理 defs?
【发布时间】:2012-05-18 19:51:09
【问题描述】:

答案在我标记的答案上,但在 cmets 中。基本上看这里:http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=18816

在带有端口的 Mac 上运行:

sudo port install ImageMagick +rsvg

这是我原来的问题:

我的 test.svg 文件在这里:https://gist.github.com/2727243

Imagemagick 版本:ImageMagick 6.7.6-9 2012-05-18 Q16(今天刚刚更新)

我有一个 SVG 文件,它使用 defs -> 符号来定义箭头符号。稍后在文档中我 xlink:use 该符号。这在 Chrome 中运行良好,并且箭头出现并处于正确位置:

但是,如果我像这样通过 imagemagick 转换图像:

convert test.svg test.png

它不起作用。这是我得到的:

“使用”似乎完全被忽略了,而是箭头在 def 处呈现。至少,据我所知。

我的 SVG 格式是否错误,以便 Imagemagick 处理这种情况?或者这只是 Imagemagick 不能正确支持的东西?我一直在寻找明确的答案,但找不到任何一种方式。

我也在这里尝试了 SVG:http://www.carto.net/svg/samples/symbol.svg,但符号不起作用。所以我倾向于 Imagemagick 是罪魁祸首。

更新:我尝试将 def 更改为以下内容:

<symbol id="arrow" x="25">

在浏览器中,箭头确实向右移动了 25,但在 Imagemagick 中,它固定在 (0,0)。这让我相信它与符号定义无关,更多的是关于它没有正确翻译它。但是,即使我尝试对“使用”进行直接变换,甚至更好地完全删除“使用”,箭头仍然会出现。

【问题讨论】:

  • Seams like a bug :( 但一种解决方法是使用 Inkscape 来正确渲染 SVG。Inkscape 支持从命令行转换为 PNG,如果这是您正在寻找的。跨度>
  • 遗憾的是,我不得不使用 ImageMagick 来完成。实际上,这将与 RMagick(到 IM 的 Rails 接口)一起使用,并在 Heroku 的服务器端完成。而且我认为我没有其他选择。

标签: svg imagemagick


【解决方案1】:

更新: 这似乎是 ImageMagick 中默认 SVG 渲染器中的一个错误,它忽略了 use 标签上的 xy(也忽略了 g 标签上的转换属性) )。尝试改用 rsvg 后端。

如果你改变它是否有效:

<use xlink:href="#arrow" x="20" y="50"></use>

收件人:

<g transform="translate(20 50)">
  <use xlink:href="#arrow"></use>
</g>

【讨论】:

  • 无赖。但是我找到了this thread about the issue,你能重新编译imagemagick来使用rsvg吗?
  • BINGO - 做到了。现在来看看 Heroku 是否可以支持它 - 到目前为止我认为它不支持...
  • 让我补充一下 - 它通过命令行工作,但不是通过 RMagick。所以,我猜它已经完成了一半,我怀疑我需要向 RMagick 提供一些配置。没有什么是容易的。 :)
  • 啊好吧 :) 两个 imagemagick 安装在不同的路径?如果您认为我更新的答案有误,请告诉我。
  • 叹息,是的,显然我有两个版本,而 RM 使用了错误的版本。试图解决这个问题。
【解决方案2】:

您能否详细说明为什么您必须使用 IM?如果事实证明 IM 在这种情况下毫无用处,那么您肯定必须使用其他东西吗?为此,我第二次使用 Inkscape。

也就是说,如果您愿意进行一些 XML 操作,也许您仍然可以使用 IM。我认为符号的内容可以单独复制到它们的&lt;use&gt; 位置;如果你有很多使用相同的符号,这是一个混乱的解决方法,但如果你想坚持使用 IM,它可能是你唯一的出路。我正在研究的理论是符号系统让 IM 感到困惑——如果路径是“内联”的,那可能没问题。

【讨论】:

  • 我必须使用 ImageMagick,因为这是在 Heroku 上托管的 Ruby on Rails 应用程序上完成的。 Heroku 通过 RMagick gem 提供 ImageMagick 作为进行图像转换的方式。因为我不认为我有办法安装 Inkscape 或使用他们的库,所以我坚持使用 IM。
  • 是的,我已经准备好基本上停止使用“使用”命令和定义,并将其全部明确化。但如果我能弄清楚的话,我会远离它。添加 RSVG 就可以了。我只希望 Heroku 会支持它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2015-04-04
  • 2018-10-26
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多