svg - rsvg 不渲染链接图像

标签 svg librsvg

我使用 python rsvg 绑定(bind)将 svg 图像渲染到 cairo 中并保存到文件,这基本上可以工作。但如果 svg 文件包含链接图像,如下所示:

<image href="static/usrimgs/tmpDtIKpx.png" x="10" y="10" width="600px" height="400px"></image>

图像没有出现在最终文件中(svg 的其余部分渲染得很好)。根据脚本运行的位置,相对路径是正确的,但我猜测它通常是相对 URL,而不是相对文件路径,这一事实存在一些问题。我该如何解决这个问题?

最佳答案

LibRsvg 必须满足许多因素才能允许加载图像资源。从 v2.40 开始,这些包括:

  • 图像必须具有 xlink:href 属性
  • 该属性必须包含完整、有效的 URI
  • 方案可以是 data://file://
  • file:// 路径必须是绝对路径
  • file:// 路径必须位于 SVG 源文件的路径中或之下(在取消引用任何符号链接(symbolic link)之后)

请注意,如果输入通过 stdin 传递到 rsvg-convert,则没有路径算作输入文件的子目录,并且所有 file:// 图像都将被拒绝.

rsvg-convert < input.svg > output.png  # images denied

rsvg-convert -o output.png input.svg  # images allowed

控制图像 URL 解析的代码可以在 LibRsvg source 中找到。在rsvg-base.c中,函数_rsvg_handle_allow_load

要在图像加载失败时向 rsvg-convert 添加调试通知,可以附加

#define G_ENABLE_DEBUG

到源代码中的config.h并重新编译。

关于svg - rsvg 不渲染链接图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961624/

相关文章:

svg - 将 SVG 转换为具有锐边的 PNG

javascript - D3 如何在启用平移/缩放的情况下使元素居中?

linker - centos:链接没有用于 pkg-config 的 .pc 文件的库

linux - 通过 librsvg 缩放矢量图像

OpenCV - 如何将像素跟随轮廓转换为顶点跟随轮廓

delphi - 使用 cairo、librsvg 和 delphi 绘制 SVG,更改所有路径的颜色

svg - 将SVG转换为PNG并保持CSS完整性

html - 如何设置笔画宽度 :1 on only certain sides of SVG shapes?

javascript - 背景图像 SVG 动画停止在 chrome 上工作

javascript - svg路径填充动画