我在此路径上有一个SVG图片http://www.quickdesign.com/user-uploads/5555f546857ce-saved.svg
我需要转换为PNG,我正在使用此php文件下面的代码http://www.quickdesign.com/png.php
<?php
$svg_file_name = 'user-uploads/5555f546857ce-saved.svg';
$png_file_name = 'png/converted.png';
$im = new Imagick();
$im->setBackgroundColor(new ImagickPixel('transparent'));
$svg = file_get_contents($svg_file_name);
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
$im->readImageBlob($svg);
/*png settings*/
$im->setImageFormat("png32");
$im->writeImage($png_file_name);
header('Content-type: image/png');
echo $im;
$im->clear();
$im->destroy();
?>
如果我删除了行$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
然后它会发出致命错误未捕获异常'ImagickException',并显示消息'此图像格式没有解码委托
任何人都可以帮助我如何使用PHP将上面的svg图像转换为PNG图像。
任何帮助都将不胜感激。
由于
答案 0 :(得分:0)
ImageMagick使用委托来读取一些图像。看起来它用于系统上的SVG文件的委托无法使用您要告诉它读取的SVG文件。
由于这一点,我的系统读取该文件也失败了:
<stop fill="url(#svg_14)" stop-color="#A0D9F7" offset="0"/>
错误消息:
php: unrecognized color `svg_14' @ warning/color.c/GetColorCompliance/1046.
php: unable to open image `svg_14': No such file or directory @ error/blob.c/OpenBlob/2674.
php: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
SVG文件中的url支持有点不稳定。似乎svg_14是在文件末尾定义的。将它移动到开头使文件“可读”,但图像看起来与它应该如何显示不同。
我建议找出代理ImageMagick用于解码SVG文件的代理,可以在convert -list configure
找到,并查找是否有该库的更新版本来解决问题。