我希望在我的Mac上实现librsvg图像渲染,以加快SVG的渲染速度。Ian Mackinnon提供了非常好的答案,但是对库进行更改实现起来有些棘手。下面这些步骤可以使librsvg正确地呈现相对路径链接的图像。希望这能为某些人节省时间。
首先,我使用以下命令安装了librsvg:
brew install --build-from-source librsvg
在撰写本文时,这将安装版本为2.40.13的软件以及构建它所需的必要库。然后,我将源代码归档文件下载并提取到我的主目录中:
wget https://download.gnome.org/sources/librsvg/2.40/librsvg-2.40.13.tar.xz
tar jxvf librsvg-2.40.13.tar.xz
cd librsvg-2.40.13
我编辑了此目录下的rsvg-base.c
文件中的_rsvg_handle_allow_load
函数,通过在第2275行附近添加以下代码来绕过路径加载限制:
2275
2276 goto allow; // Just try and load it!
2277
我还需要编辑rsvg-image.c
中的rsvg_cairo_surface_new_from_href
函数并停止使用mime类型进行加载 - 只需像这样替换函数:
55 if (mime_type) {
56 // loader = gdk_pixbuf_loader_new_with_mime_type (mime_type, error); // This doesn't work on my mac
57 loader = gdk_pixbuf_loader_new (); // This works
58 } else {
59 loader = gdk_pixbuf_loader_new ();
60 }
我需要使用这些稍作修改的命令来编译并安装修改后的库:
make clean
make install gdk_pixbuf_binarydir=/usr/local/Cellar/librsvg/2.40.13/lib/gdk-pixbuf-2.0/2.10.0/loaders gdk_pixbuf_moduledir=/usr/local/Cellar/librsvg/2.40.13/lib/gdk-pixbuf-2.0/2.10.0/loaders
根据您的系统,您可能需要将sudo添加到上述命令中。
完成此操作后,我可以使用安装有librsvg的rsvg-convert
命令行工具呈现相对SVG链接:
rsvg-convert test.svg -o test.png
如果我在安装librsvg之后按照以下方式安装ImageMagick,我也可以使用ImageMagick将具有相对图像链接的SVG转换为PNG文件:
convert test.svg test.png
这将让您测试rsvg功能和性能-我发现它比Inkscape快2-3倍,非常适用于我的应用程序。如果您在生产环境中使用此功能,建议更智能地更改代码。