使用ImageMagick进行SVG转换为PNG无法处理defs?

时间:2012-05-18 19:51:09

标签: svg imagemagick

答案是我标记的答案,但是在评论中。基本上,请看这里: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 - >用于定义箭头符号的符号。稍后在文档I xlink中:使用该符号。这在Chrome中运行良好,箭头出现并处于正确的位置:

enter image description here

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

convert test.svg test.png

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

enter image description here

“use”似乎被完全忽略,而箭头则在def处呈现。至少,我可以告诉你。

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

我还在这里尝试了SVG:http://www.carto.net/svg/samples/symbol.svg并且符号不起作用。所以我倾向于将Imagemagick作为罪魁祸首。

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

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

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

2 个答案:

答案 0 :(得分:2)

更新:此接缝是ImageMagick中默认SVG渲染器中的一个错误,它忽略了x标记上的yuse(并且还忽略了转换) g标签上的属性)。请尝试使用rsvg后端。

如果你改变了它是否有效:

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

要:

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

答案 1 :(得分:0)

您能详细说明 使用IM的原因吗?如果事实证明IM在这种情况下是无用的,那么肯定你必须使用别的东西吗?我是第二个Inkscape。

也就是说,如果你愿意做一些XML操作,也许你仍然可以使用IM。我认为符号的内容可以单独复制到<use>个位置;如果你有很多相同符号的使用,这是一个混乱的解决方法,但如果你想坚持使用IM,它可能是你前进的唯一途径。我正在研究这是一个让IM混淆的符号系统的理论 - 如果路径是'内联'则可能没问题。