ImageMagick SVG到PNG加扰输出

时间:2017-01-09 10:31:58

标签: html svg

我正在尝试将SVG文件转换为PNG或JPG,以便在浏览器的<div>中显示它,只需按一下按钮即可将其加载。 SVG没有格式错误,因为它在浏览器上正确显示。 我用:

ob_start();
require("svgoutput.php");
$svg = ob_get_clean();

$image = new Imagick();
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg;
$image->readImageBlob($svg);
$image->setImageFormat("png");
header("Content-Type: image/png");
echo $image->getImageBlob();

如果我检索$svg变量,它会正确地开始和结束所有SVG标记。

但不是给我一张图片,而是给我回报:

fbf26c2c7089474d836985b87d5da84d[1].png

此外,即使如果它的内容显示为文本,它也太小,内容太少。

我做错了什么?

编辑:如果我强制png输出(在base64中编码并将其输出为img标签),它会返回给我:

http://prntscr.com/dtc9it

1 个答案:

答案 0 :(得分:0)

我明白了。

我已经在文档的另一部分调用了header,因此不再适用,所以我决定将其编码为base64并将其放在img标记中,如下所示:

<img src="data:image/png;base64,<?php echo $base64; ?>" alt="" />

输出的图像是空白的,因为svg末尾有一个<br>标签,我忘了删除它。现在它有效。

以下是完整的代码(已验证)

<?php 

ob_start();
require("index2.php");
$svg = ob_get_clean();

$image = new Imagick();
$svg = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'.$svg; 
$image->readImageBlob($svg);
$image->setImageFormat("png");
$image = $image->getImageBlob();
$base64 = base64_encode($image);
?>
<img src="data:image/png;base64,<?php echo $base64; ?>" alt="" />