ImageMagick / IMagick渲染SVG中的组偏移

时间:2015-11-23 14:53:58

标签: php imagemagick imagick

我有一个应用程序,它将SVG作为输入并转换为PNG作为输出。我遇到了一个问题,即如果SVG使用标签对项目进行了分组,则该内容会在SVG上向右下方呈现。

这只发生在使用IMagick。如果我在Illustrator或Inkscape for PC中打开SVG,它看起来很好。这是SVG代码的样子:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="2400px" height="3200px" xmlns:xlink="http://www.w3.org/1999/xlink">
   <g id="SvgjsG1048" transform="rotate(0 1200 1600) translate(30.927835051559143 41.23711340207863) scale(0.9742268041237008 0.9742268041237009) " x="30.927835051559143" y="41.23711340207863">
      <image id="SvgjsImage1049" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="aerosmith.png" width="2400" height="3200"></image>
   </g>
</svg>

这里是我用来拉入和渲染的代码:

// setup the SVG
$svg_front = new Imagick();
$svg_front->setBackgroundColor(new ImagickPixel('transparent'));
$svg_front->readImage($json->imageFront); // pull in the SVG image

// convert the SVG to PNG @ 200 dpi - yes, it works!
$svg_front->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
$svg_front->setImageResolution(200,200);

// set image format
$svg_front->setImageFormat('png');

// render the SVG
echo $svg_front;

这里没什么不寻常的。删除代码以设置分辨率并没有任何区别,我也尝试过resetPage也没有效果。

现在,如果我删除标记并将图像留在那里,那么SVG渲染没有问题。但是,我无法控制应用程序是否发送分组项目,而IMagick无论如何都需要呈现它。

图片在SVG中使用标记呈现为PNG时的图像:http://brainboxinteractive.com/bad-svg.png

这里应该是什么样的:http://brainboxinteractive.com/what-it-should-look-like.png

Inkscape已安装在服务器上,因此IMagick / ImageMagick正在使用它,因此我不确定从何处开始调试并解决此问题。任何帮助将不胜感激!

0 个答案:

没有答案