svg - ImageMagick (RSVG) 不会导入 SVG 中的图像

标签 svg imagemagick librsvg

我正在尝试使用 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 来转换它们,但对于这一项任务来说似乎有点矫枉过正。

请帮忙!

最佳答案

对我来说,安装 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
  • 共享-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
  • 共享颜色配置文件-0.1.5-1-任意
  • 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

(我将它们留在这里,以防它不是我最终确定的库)

因此,我尝试按组删除这些部门,并在其间进行重建和测试。事实证明,让它发挥作用的是......

* 共享 mime 信息

关于svg - ImageMagick (RSVG) 不会导入 SVG 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16702889/

相关文章:

javascript - D3.js - 选择知道属性的一部分

javascript - 使用 jQuery 查找并替换按钮单击时的颜色

javascript - svg中的base64图像第一次不显示

javascript - SVG getAttribute/setAttribute 只是添加到坐标而不是 "setting"?

ruby - 在 RMagick 中创建具有两种颜色的标题

pdf - 将 EPS 转换为 PNG 并指定宽度/高度

c++ - Imagemagick C++ : Reducing memory usage

linux - linux下用svgalib程序调试

cairo - Pango 无法使用 librsvg 找到字体