ImageMagick(RSVG)无法导入SVG图像

8

我正在尝试使用ImageMagick将SVG文件转换为PNG。

以下是SVG文件:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
    <image xlink:href="picture.jpg" width="200" height="200"/>
</svg>

无论我使用什么方法,最终结果都不包括图像。其他SVG元素已正确呈现。
我已经尝试过:
convert test.svg test.png
rsvg-convert -o test.png test.svg

我曾尝试过使用 file:///, 绝对路径,远程 URL 和 URL 编码的变化方式来更改图像路径。我还尝试了加入和不加入文档类型的格式。
我使用的是 librsvg 2.36.3 和 ImageMagick 6.8.0-10。虽然我已经能够使用 phantomjs 来转换它们,但这似乎对于这个任务来说有些过度了。
请帮忙!

你成功让它工作了吗,@KTastrophy? - projeqht
@projeqht:部分地。我只能让它在嵌入式图像为PNG的情况下工作。我还没有花足够的时间去找出原因。自那以后,我尝试了inkscape,并取得了显着更好的结果,这是有道理的,因为它基于SVG。 - KTastrophy
奇怪...我试图嵌入的图像确实是PNG格式,但就像你说的那样,这个图像没有被渲染,而其他SVG对象却被渲染了。事实上,我甚至无法获得透明背景。如果我删除SVG图像元素,背景仍然呈白色...有什么想法吗? - projeqht
确保您正在使用rsvg。执行 convert -list delegate 命令,并确保它在 svg 旁边显示了 rsvg。您尝试的确切命令是什么? - KTastrophy
可能是rsvg无法呈现链接图像的重复问题。 - Ian Mackinnon
显示剩余7条评论
1个回答

1
对我来说,安装gtk3(或者可能更具体地说是“shared-mime-info”)有所帮助。(然后重新安装rsvg,并使用绝对的“file:///”uri作为href,并将图像文件放在与svg文件相同的目录中。)
更多信息(我仍然不确定到底发生了什么):
我认为问题不在于rsvg本身,而是与gdk-pixbuf(2)库有关。我找到了代码中使用gdk-pixbuf加载图像的位置。我通过printf调试确认它不会抛出错误(即使href中的URI没有指向文件,似乎也能很好地加载pixbuf)。gtk3依赖项仅对rsvg-view-3工具必需,而不是对rsvg必需,但似乎是(或者是我安装gtk3时拉入的依赖项之一)。即使卸载了gtk3,它仍然可以正常工作。即使卸载了gtk3,然后重新构建rsvg(./configure检测到:“gtk3:no”),它仍然可以正常工作,因此我认为它必须与我安装gtk3时拉入的依赖项之一有关:
  • atk-2.10.0-1-i686
  • hicolor-icon-theme-0.12-2-any
  • gtk-update-icon-cache-2.24.22-1-i686
  • libtasn1-3.3-2-i686
  • p11-kit-0.20.1-1-i686
  • gnutls-3.2.5-1-i686
  • libcups-1.7.0-1-i686
  • libxinerama-1.1.3-2-i686
  • shared-mime-info-1.2-1-i686
  • libgusb-0.1.6-1-i686
  • nspr-4.10.1-2-i686
  • js-17.0.0-1-i686
  • polkit-0.112-1-i686
  • shared-color-profiles-0.1.5-1-any
  • dconf-0.18.0-1-i686
  • colord-1.0.2-2-i686
  • recordproto-1.14.2-1-any
  • libxtst-1.2.2-1-i686
  • at-spi2-core-2.10.1-1-i686
  • at-spi2-atk-2.10.0-1-i686
  • xkeyboard-config-2.10.1-1-any
  • libxkbcommon-0.3.1-1-i686

如果最终确定的库不是我所认定的库,以下内容仅供参考。

于是我尝试分组删除这些依赖项,然后在中间进行重建和测试。结果发现使其正常工作的一个依赖项是...

* shared-mime-info


此外,似乎只有在图像文件与svg文件位于同一目录中时才能正常工作,即使使用完整的绝对“file:///...”uri用于href也是如此。 - molecular
1
在config.h中定义“#define G_ENABLE_DEBUG”非常有帮助。然后,rsvg-convert就会输出一个实际的错误,指出找不到该文件。 - molecular

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接