Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php readimageblob:将SVG转换为PNG时出现致命错误_Php_Jquery_Json_Imagick - Fatal编程技术网

Php readimageblob:将SVG转换为PNG时出现致命错误

Php readimageblob:将SVG转换为PNG时出现致命错误,php,jquery,json,imagick,Php,Jquery,Json,Imagick,我正在尝试将ImageMagick与PHP结合使用,将SVG文本转换为PNG图像。这个SVG是用生成的图表,我希望允许我的用户将其作为图像下载 基本上,我将用JSON编码的SVG数据发送到PHP处理程序,该处理程序应将其作为PNG图像输出 但是,这引发了以下错误: Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ blob.c

我正在尝试将ImageMagick与PHP结合使用,将SVG文本转换为PNG图像。这个SVG是用生成的图表,我希望允许我的用户将其作为图像下载

基本上,我将用JSON编码的SVG数据发送到PHP处理程序,该处理程序应将其作为PNG图像输出

但是,这引发了以下错误:

Fatal error: Uncaught exception 'ImagickException' with message 'no decode delegate for this image format `' @ blob.c/BlobToImage/347' in svg2png.php:4 Stack trace: #0 svg2png.php(4): Imagick->readimageblob('
用于转换图像的PHP脚本

<?php
    /* Derived in part from: http://stackoverflow.com/a/4809562/937891 */
    $svg=json_decode($_REQUEST["svgData"]);
    $im=new Imagick();
    $im->readImageBlob($svg);
    $im->setImageFormat("png24");
    header("Content-Type: image/png");
    $thumbnail = $im->getImageBlob();
    echo $thumbnail;
?>
示例SVG,由NVD3生成:


这是在使用PHP5.3的Ubuntu服务器上,需要为
readImageBlob
指定Imagick

svg文件文本结构来解码文件。 将
前置到包含svg文本的变量

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
$svg='.$svg;
你可以走了。

记住这一点

<?xml version="1.0" encoding="UTF-8" standalone="no"?>


必须是包含SVG文本的变量的第一行。知道这一点可能会让您省去一些麻烦。

您的Imagick安装很可能缺少正确的代理。看见
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
<?xml version="1.0" encoding="UTF-8" standalone="no"?>