我正在尝试通过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()”方法。以下代码(slightly modified but originally suggested here)在第四行失败:
<?
$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支持格式”。