我正在尝试使用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的编码形式。我还格式化了带有和不带有doctype的文件。

我正在使用librsvg 2.36.3和ImageMagick 6.8.0-10
我已经能够使用phantomjs来转换它们,但似乎对于这项任务来说过于刻板了。

请帮忙!

最佳答案

对我来说,安装gtk3(或更确切地说,可能是“shared-mime-info”有帮助)。(此后重新安装rsvg,并使用绝对的“file:///” uri来实现href且图像文件与svg文件位于同一目录)

更多信息(我仍然困惑到底是怎么回事):

  • 我认为问题不在于rsvg,而在于gdk-pixbuf(2)库
  • 我在代码中找到了使用gdk-pixbuf加载图像的地方。我确认(使用printf debuggin),即使href中的uri未指向文件,也不会引发错误(似乎可以很好地加载pixbuf)。
  • gtk3依赖关系仅对rsvg-view-3工具才是必需的,而对于rsvg则不是,但似乎(或我安装gtk3时引入的依赖关系之一)
  • 即使卸载gtk3,它仍然可以工作。卸载gtk3之后,它甚至仍然可以工作,然后重新构建rsvg(./configure检测到:“gtk3:否”),因此我认为它必须与安装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
  • 彩色1.0.2-2-i686
  • recordproto-1.14.2-1-任何
  • 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

  • (以防万一不是我最终确定的库,我将其保留在此处)

    因此,我尝试将这些部门分组删除,并在两者之间进行重建和测试。原来使它工作的是...

    *共享 mime 信息

    10-06 04:23