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();
我在不同的配置上测试此错误,结果相同:
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委托)。
答案 0 :(得分:1)
我无法在最新的ImageMagick上重现此问题。
Imagick调用ImageMagick库来完成它所有的图像处理。 Image Magick库并不总是处理SVG本身,它可以将它们的渲染委托给另一个库来处理它们。
从命令行,如果您运行convert -list configure
,您应该能够在DELEGATES
条目下查看ImageMagick正在使用的代理。
如果您看到Inkscape或RSVG您或其他用于SVG处理的库,您可以尝试升级到它的最新版本。如果您没有SVG委托,那么您应该尝试最新版本的ImageMagick。