【问题标题】:Imagick : SVG to PNG conversion giving me blank png image想象一下:SVG 到 PNG 的转换给了我空白的 png 图像
【发布时间】:2015-08-08 01:26:39
【问题描述】:

我在这条路径上有一个 SVG 图像http://www.quickdesign.com/user-uploads/5555f546857ce-saved.svg

我需要将它转换成 PNG

<?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 = '&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;'.$svg; 行,那么它会给出致命错误未捕获的异常“ImagickException”,消息“没有此图像格式的解码委托”

谁能帮助我如何使用 PHP 将上述 svg 图像转换为 PNG 图像。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 当您搜索“no decode delegate for this image format”并尝试建议时,发生了什么?
  • 这一行已修复 $svg = ''.$svg;

标签: svg imagick


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2015-01-16
    • 1970-01-01
    • 2015-04-29
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    相关资源
    最近更新 更多