控制台工作,PHP尝试使用ImageMagick将.svg转换为.png时失败

时间:2013-07-17 23:05:42

标签: php svg imagemagick png

我正在尝试通过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支持格式”。

0 个答案:

没有答案