Imagick:SVG到PNG的转换给了我空白的png图像

时间:2015-05-26 11:36:28

标签: svg imagick

我在此路径上有一个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图像。

任何帮助都将不胜感激。

由于

1 个答案:

答案 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找到,并查找是否有该库的更新版本来解决问题。