使用带有imagemagick的内联svg

时间:2015-07-25 08:14:44

标签: svg imagemagick

我试图确定从内联SVG图像转换为png图像的最佳方式(svg是动态生成的,并根据用户输入进行更改)。 现在我有:

 <?php
$svgtest = '
<svg width="100" height="100">
    <text x="5" y="12">hi</text>
</svg>
';

exec("convert \"$svgtest\" \"test.png\" ");
?>

但那不起作用。

1 个答案:

答案 0 :(得分:1)

使用ImageMagick扩展名和以下代码:

$im = new imagick();
$im->setBackgroundColor(new ImagickPixel('white'));
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg width="100" height="100"><text x="5" y="12">hi</text></svg>';
$im->readImageBlob($svg);
$im->setImageFormat("png");
$im->writeImage("out.png");

请注意,SVG字符串具有xml声明。

要使用命令行,您始终可以读取STDIN或将字符串放入文件中,然后对其进行处理。但是,对于某些恶意用户输入,这更容易受到攻击。

echo "<?xml version='1.0' encoding='UTF-8' standalone='no'?><svg width='100' height='100'><text x='5' y='12'>hi</text></svg>" | convert - out2.png

要做到这一点,只需将上述行传递到exec()

即可