Использование RSVG для преобразования svg с нелокальным изображением

У меня есть изображение SVG, которое я пытаюсь преобразовать в PNG:

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg"
    xmlns:xlink="http://www.w3.org/1999/xlink">
  <image x="0" y="0" width="158" height="158"
     xlink:href="http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png" />
</svg>

Это работало на Ubuntu 10.04, но теперь на 12.04 это не так. Причина, по-видимому, в том, что RSVG теперь не будет загружать URL-адрес изображения, у которого нет относительного пути.

Это не вариант здесь - мой веб-сайт генерирует SVG (поэтому я знаю, что это безопасно), но требует, чтобы изображения загружались через HTTP.

Изображение отлично отображается в Chrome, но не в Imagemagick, Gimp или (как ни странно) Inkscape.

Если это поможет, я использую Imagemagick через PHP, но здесь RSVG является делегатом для преобразования SVG.

Есть ли у кого-нибудь идеи, как это обойти, кроме перекомпиляции librsvg?

Я попробовал предложения в ImageMagick (RSVG) не будет импортировать изображения в SVG и это подозрительно похоже на эту проблему: rsvg не отображает связанные изображения


Я нашел код, который отвечает здесь: https://git.gnome.org/browse/librsvg/tree/rsvg-base.c#n2169

Я могу ошибаться, но похоже, что они отключили загрузку с других URL-адресов без возможности повторно включить ее, кроме перекомпиляции?


person Gordon Williams    schedule 14.10.2014    source источник
comment
Поскольку librsvg совместно используется в семействе gnome/gtk, очень важно иметь строгий deny для удаленных ресурсов. Если вы уже используете PHP, не составит труда получить удаленные ресурсы с помощью file_get_contents и измените SVG с помощью DOMDocument   -  person emcconville    schedule 14.10.2014
comment
Собственно этим я сейчас и занимаюсь. Это действительно отстой, что что-то вроде librsvg может настолько сильно измениться между версиями, что просто перестанет работать без предупреждения и станет фактически бесполезным (поскольку нет даже способа повторно включить старое поведение). @emcconville, вы хотите опубликовать решение для этого, чтобы я мог его принять? Мое решение довольно злое и не универсальное, потому что я знаю формат URL, который будет в созданном мной SVG.   -  person Gordon Williams    schedule 14.10.2014
comment
Хм. Вам действительно нужен rsvg? В зависимости от сложности изображений svg вы можете использовать внутренний механизм векторной графики IM. Работает ли следующая команда в вашей системе? convert -size 158x158 msvg:source.svg out.png   -  person emcconville    schedule 14.10.2014
comment
Спасибо! МСВГ работает! Мои SVG не суперсложны, они просто используют поворот, текст, изображения и закругленные прямоугольники. Любые идеи, как я могу заставить PHP Imagick использовать его? Конечно, Imagemagick может изменить MSVG и в будущем, так что, возможно, исходное решение лучше...   -  person Gordon Williams    schedule 15.10.2014
comment
На самом деле, когда я запускаю «convert msvg:» для изображений, которые я делаю, это тоже по какой-то причине не работает, поэтому вернемся к варианту 1. Еще один вариант (в моем случае) — это обслуживать файл SVG с того же веб-сервера. что изображения включены, а затем загрузить их из HTTP для преобразования - это решает проблемы с тем же источником.   -  person Gordon Williams    schedule 15.10.2014