rsvg不呈现链接的图像

col*_*arc 6 svg librsvg

我使用python rsvg绑定将svg图像渲染到cairo并保存到文件,这主要起作用.但是如果svg文件包含链接图像,如下所示:

<image href="static/usrimgs/tmpDtIKpx.png" x="10" y="10" width="600px" height="400px"></image>
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*non 15

LibRsvg必须满足许多因素才能加载图像资源.截至v2.40,这些包括:

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

请注意,如果输入传递给rsvg-convertvia stdin,则没有路径计为输入文件的子目录,并且所有file://图像都将被拒绝.

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

rsvg-convert -o output.png input.svg  # images allowed
Run Code Online (Sandbox Code Playgroud)

管理图像U​​RL解析的代码可以在函数的LibRsvg源代码中找到.rsvg-base.c_rsvg_handle_allow_load

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

#define G_ENABLE_DEBUG
Run Code Online (Sandbox Code Playgroud)

config.h在源和重新编译.


col*_*arc 3

答案是首先处理链接file:///并使其成为完整的绝对路径。