Я хотел получить рендеринг изображений librsvg на моем Mac, чтобы ускорить рендеринг SVG. Отличный ответ Яна Маккиннона имеет все ингредиенты, но реализация изменений в библиотеке сложна. Эти шаги сделали 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 для вышеуказанных команд.
После того, как это было сделано, я мог бы оказать относительно SVG ссылки с помощью инструмента линии rsvg-convert
команды, которая установлена с librsvg:
rsvg-convert test.svg -o test.png
Я также был в состоянии использовать ImageMagick для преобразования SVGs с относительными ссылками на изображения в формат PNG файлы, если я установил его после установки librsvg таким образом:
convert test.svg test.png
Это позволит вам проверить rsvg функции и производительность - я обнаружил, что это 2-3x быстрее, чем Inkscape для моего приложения. Я рекомендую изменить код более разумно, если вы используете его в рабочей среде.
У меня такая же проблема. Ввод неверного url href (ссылка на файл, который не существует) показывает, что rsvg не выводит ошибку, если он не может найти файл. – molecular