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

10

我想使用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();

首先,它花费太长时间,接下来它创建了一个空白页面。 - Badar
2个回答

1

这可能与您的问题无关,但您是否尝试在 Imagick 类之前加上 "\" 进行调用?例如: $newImage = new \Imagick();

我知道我曾经遇到过与您相同的错误,即找不到类,直到我添加了此命名空间前缀。我认为这与命名空间以及如何使用 Web 应用程序的 classLoader 加载类文件有关。


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>";

希望这对那些面临类似问题的人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接