readimageblob:致命错误转换成SVG时,PNG(readimageblob: Fatal

2019-07-03 10:54发布

我试图用图片,Magick用PHP SVG的文本转换成PNG图像。 这SVG是生成的图表NVD3 ,我想,让我的用户下载其作为图像。

基本上,我发送SVG数据,使用JSON编码为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;
?>

HTML:

<form id="exportSpendTrendTrigger" method="POST" action="svg2png.php" target="_blank">
    <input id="exportSpendTrendSvgData" type="hidden" name="svgData" />
    <input type="submit" class="btn" value="Export" />
</form>
<div id="spendtrend">
    <svg></svg>
</div>

jQuery的:

exportSpendTrend = function (e) {
    //Show the user the PNG-image version for download
    $("#exportSpendTrendSvgData").val( JSON.stringify($("#spendtrend").html().trim()) );
}

$("#exportSpendTrendTrigger").on("submit", exportSpendTrend);

例如SVG,通过NVD3生成: http://pastebin.com/Z3TvDK16

这是一个Ubuntu服务器上使用PHP 5.3和Imagick

Answer 1:

SVG文件的文本结构需要指定readImageBlob对文件进行解码。 前置<?xml version="1.0" encoding="UTF-8" standalone="no"?>到您的变量具有SVG文本。

$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;

你是好去。



Answer 2:

请记住,

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

必须在包含SVG的文本变量中的第一道防线。 明知可能会救你有些头疼。



文章来源: readimageblob: Fatal Error when converting SVG into PNG