我使用 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/