首页 文章

ImageMagick SVG到PNG加扰输出

提问于
浏览
0

我正在尝试将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标记 .

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

fbf26c2c7089474d836985b87d5da84d1.png

而且,即使它太小,内容也太少了 .

我究竟做错了什么?

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

http://prntscr.com/dtc9it

1 回答

  • 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="" />
    

相关问题