错误使用PHP Imagick的hueRotate过滤器渲染SVG

时间:2015-06-20 15:16:32

标签: php svg imagick svg-filters

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 wrong SVG-render

我在不同的配置上测试此错误,结果相同:
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,latest-master),带有本机svg渲染(没有svg委托)。

1 个答案:

答案 0 :(得分:1)

我无法在最新的ImageMagick上重现此问题。

Imagick调用ImageMagick库来完成它所有的图像处理。 Image Magick库并不总是处理SVG本身,它可以将它们的渲染委托给另一个库来处理它们。

从命令行,如果您运行convert -list configure,您应该能够在DELEGATES条目下查看ImageMagick正在使用的代理。

如果您看到Inkscape或RSVG您或其他用于SVG处理的库,您可以尝试升级到它的最新版本。如果您没有SVG委托,那么您应该尝试最新版本的ImageMagick。