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_handle_allow_load
このディレクトリの関数を編集して、rsvg-base.c
2275行目に次のコードを追加することにより、パスの読み込み制限を回避しました。
2275
2276 goto allow; // Just try and load it!
2277
rsvg_cairo_surface_new_from_href
また、関数を編集し、rsvg-image.c
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を追加する必要がある場合があります。
rsvg-convert
これが完了すると、librsvgとともにインストールされるコマンドラインツールを使用して、相対的なSVGリンクをレンダリングできます。
rsvg-convert test.svg -o test.png
このようにlibrsvgをインストールした後にインストールした場合、ImageMagickを使用して相対画像リンクを持つSVGをPNGファイルに変換することもできました。
convert test.svg test.png
これにより、rsvgの機能とパフォーマンスをテストできます。私のアプリケーションでは、Inkscapeよりも2〜3倍高速であることがわかりました。実稼働環境でこれを使用する場合は、コードをよりインテリジェントに変更することをお勧めします。