我试图确定从内联SVG图像转换为png图像的最佳方式(svg是动态生成的,并根据用户输入进行更改)。 现在我有:
<?php
$svgtest = '
<svg width="100" height="100">
<text x="5" y="12">hi</text>
</svg>
';
exec("convert \"$svgtest\" \"test.png\" ");
?>
但那不起作用。
答案 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()