Je voulais que le rendu de l'image librsvg fonctionne sur mon Mac pour accélérer le rendu SVG. La bonne réponse d'Ian Mackinnon a tous les ingrédients, mais la mise en œuvre d'un changement à la bibliothèque est difficile. Ces étapes ont permis à librsvg de restituer correctement les images liées avec des chemins relatifs. J'espère que cela fait gagner du temps à quelqu'un.
Tout d'abord, j'ai installé librsvg en utilisant:
brew install --build-from-source librsvg
Au moment de l'écriture, cela installe la version 2.40.13 et les bibliothèques nécessaires pour le construire.Je puis téléchargé et décompressé l'archive source dans mon répertoire personnel:
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
J'ai effectué la fonction _rsvg_handle_allow_load
dans rsvg-base.c
dans ce répertoire pour contourner les restrictions de chargement de chemin en ajoutant ce code autour de la ligne 2275:
2275
2276 goto allow; // Just try and load it!
2277
J'ai aussi besoin de modifier la fonction rsvg_cairo_surface_new_from_href
dans rsvg-image.c
et arrêter le chargement en utilisant les types MIME - il suffit de remplacer la fonction comme ceci:
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 }
je devais utiliser ces commandes légèrement modifiées pour compiler et installer la bibliothèque modifiée:
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
En fonction de votre système, vous pourriez avoir besoin d'ajouter sudo aux commandes ci-dessus.
Une fois que cela a été fait, je pouvais rendre des liens SVG par rapport à l'aide de l'outil de ligne de commande rsvg-convert
qui est installé avec librsvg:
rsvg-convert test.svg -o test.png
J'ai également pu utiliser ImageMagick pour convertir SVGs avec des liens d'image par rapport à PNG fichiers si je l'ai installé après avoir installé librsvg de cette façon:
convert test.svg test.png
cela vous permettra de tester rsvg fonction et la performance - je l'ai trouvé était 2-3x plus rapide que Inkscape pour mon application. Je recommande de modifier le code plus intelligemment si vous l'utilisez dans un environnement de production.
J'ai le même problème. Mettre une url href invalide (lien vers un fichier qui n'existe pas) révèle que rsvg ne produira pas d'erreur s'il ne trouve pas le fichier. – molecular