我有一个应用程序,它将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正在使用它,因此我不确定从何处开始调试并解决此问题。任何帮助将不胜感激!