2

答案在我标记的答案上,但在评论中。基本上,见这里: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)。这让我相信它与符号定义无关,更多的是关于它没有正确翻译它。但是,即使我尝试对“使用”进行直接变换,甚至更好地完全删除“使用”,箭头仍然会出现。

4

2 回答 2

2

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

如果你改变它是否有效:

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

至:

<g transform="translate(20 50)">
  <use xlink:href="#arrow"></use>
</g>
于 2012-05-18T20:30:54.640 回答
0

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

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

于 2012-05-19T11:19:39.727 回答