我正在尝试通过 PHP 将 SVG 转换为 PNG 文件。我已经接受了这样一个事实,即唯一合理的方法是通过 ImageMagick。
我正在 Windows 7 中进行 xampp 设置的开发工作,生产将在 linux 环境中进行。以下 PHP 代码在文件转换中成功:
$svg_file_name = "image.svg";
$png_file_name = "image.png";
system("convert -background none $svg_file_name $png_file_name");
但是,出于安全原因,生产服务器可以访问禁用的“system()”方法。以下代码(稍作修改,但最初在此处建议)在第四行失败:
<?
$image = new Imagick();
$contents = file_get_contents('image.svg');
$image->readImageBlob($contents);
$image->setImageFormat("png24");
$image->resizeImage(400, 225, imagick::FILTER_LANCZOS, 1);
$image->writeImage('image.png');
出现错误:
Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ error/blob.c/BlobToImage/358' in C:\Web\xampp\htdocs\sitename.com\editor\image.php:4 Stack trace: #0 C:\Web\xampp\htdocs\sitename.com\editor\image.php(4): Imagick->readimageblob('<svg width="640...') #1 {main} thrown in C:\Web\xampp\htdocs\sitename.com\editor\image.php on line 4
当使用 .jpg 文件作为输入时,上述代码有效。
SVG文件的内容如下:
<svg width="640" height="480" xmlns="http://www.w3.org/2000/svg">
<g>
<circle id="svg_1" r="72.73239" cy="89" cx="210" stroke-width="5" stroke="#000000" fill="#FF0000"/>
<circle id="svg_2" r="71.06335" cy="155" cx="383" stroke-width="5" stroke="#000000" fill="#FF0000"/>
</g>
</svg>
我已经阅读了几十个关于类似主题的讨论,但没有一个是在 Windows 环境中运行的。我不确定如何处理“无解码委托”消息,因为我的 phpinfo() 将 SVG 列为“ImageMagick 支持的格式”。