Неправильный рендеринг SVG с фильтром hueRotate от PHP Imagick

PHP Imagick отображает неправильные цвета с фильтром SVG feColorMatrix. Например, я беру синий квадрат и поворачиваю его оттенок на 1 градус. Браузер отобразит это правильно: http://codepen.io/anon/pen/BNwVWK -- У меня получился синий цвет.

Однако PHP неправильно отображает квадрат в фиолетовом цвете.

$svg = '<?xml version="1.0"?><svg version="1.1" width="100" height="100">
         <defs>
           <filter id="myf">
              <feColorMatrix type="hueRotate" values="1" />
           </filter>
         </defs>
         <rect filter="url(#myf)" width="100" height="100" style="fill:rgb(0,0,230);" />
        </svg>';
$image = new Imagick();
$image->readImageBlob($svg);
$image->setImageFormat("jpeg");
header("Content-Type: image/jpeg");
echo $image->getImageBlob();

Imagic неправильный SVG-рендеринг

Я тестировал эту ошибку на разных конфигурациях с одинаковыми результатами:
1. WAMP, PHP 5.4.29, Imagic 3.3.0RC2, ImageMagick 6.8.9-1 Q16 x86, делегирование svg: RSVG 2.40.1
2. LAMP , ImageMagic (7.0, последний мастер) с собственным рендерингом svg (без делегирования svg).


person vatavale    schedule 20.06.2015    source источник


Ответы (1)


Я не могу воспроизвести эту проблему на последней версии ImageMagick.

Imagick вызывает библиотеку ImageMagick для обработки изображений. Библиотека Image Magick не всегда сама обрабатывает SVG, она может делегировать их рендеринг другой библиотеке для их обработки.

Из командной строки, если вы запустите convert -list configure, вы сможете увидеть, какие делегаты используются ImageMagick, под записью DELEGATES.

Если вы видите Inkscape или RSVG или другую библиотеку, которая используется для обработки SVG, вы можете попробовать обновить ее до последней версии. Если у вас нет делегата SVG, попробуйте последнюю версию ImageMagick.

person Danack    schedule 20.06.2015
comment
Подскажите, пожалуйста, ваши версии ImageMagick & Imagick? - person vatavale; 20.06.2015
comment
У меня неправильные результаты не только на моей локальной машине, но и на двух разных средах хостинга Linux. - person vatavale; 20.06.2015
comment
Мастер ImageMagick и мастер Imagick — github.com/mkoppanen/imagick github.com/ImageMagick/ImageMagick . Обновление Imagick не даст никакого эффекта (он просто передает рендеринг изображения ImageMagick). И если вы используете делегат для обработки изображений SVG, обновление ImageMagick не будет иметь никакого эффекта. Сначала вам нужно выяснить, как ImageMagick обрабатывает изображения SVG. - person Danack; 20.06.2015
comment
Я проверил это вчера и сделал неверные выводы о делегировании. Теперь командой convert -list format я обнаружил РСВГ. SVG SVG rw+ Scalable Vector Graphics (RSVG 2.40.1) SVGZ SVG rw+ Compressed Scalable Vector Graphics (RSVG 2.40.1) - person vatavale; 21.06.2015
comment
К сожалению, у меня такой же неправильный результат с ImageMagick-master без делегирования svg в Debian. Смотрите обновленный вопрос. - person vatavale; 23.06.2015