如何在PHP中使用ImageMagick将SVG转换为PNG?

时间:2015-05-01 20:31:04

标签: php image svg imagemagick png

我想使用PHP使用ImageMagick将SVG转换为PNG。我在XAMPP上安装了ImageMagick并使用phpinfo()验证了它,但仍然无法生成图像。这是我的代码:

$svg = file_get_contents($svg_file);
//echo $svg;
$im = new Imagick();    
//$im->setBackgroundColor(new ImagickPixel('transparent'));  
// $svg = str_replace(array("color1","color2"),array("red","lightblue"),$svg);
$im->readImageBlob($svg);
//$im->setImageFormat("png32");
$im->setImageFormat("png24");
// $im->resizeImage(720, 445, imagick::FILTER_LANCZOS, 1);  
// $im->adaptiveResizeImage(720, 445);    
$im->writeImage($png_file);
header('Content-type: image/png');
echo $im;
$im->clear();
$im->destroy();

2 个答案:

答案 0 :(得分:1)

它可能与您的问题无关,但是您之前尝试使用“\”调用Imagick类吗?喜欢 : $ newImage = new \ Imagick();

我知道我和你有同样的错误,就是找不到这个类,直到我添加了这个前缀命名空间。我认为它与命名空间以及如何使用web-app的classLoader加载类文件有关。

答案 1 :(得分:0)

即使您在此处遵循所有建议,如果您获得空白的png图像,您可能需要检查您的svg中的任何文本是否被适当地转义。我花了一两个小时的时间摸不着头脑为什么我没有得到任何输出,直到我发现我的文字中有一个&符号。解决办法是首先通过htmlspecialchars()传递文本,即

$annotation = htmlspecialchars($this->sequence . ' : ' . $this->name);
$svg .= "<text id=\"annotation-{$this->index}\" x=\"{$this->xText}\" y=\"{$this->yText}\" font-size=\"12\" style=\"fill: #000000\" onclick=\"passClickToTask(evt)\"> $annotation</text>";

希望这有助于其他遇到类似问题的人。