【问题标题】:ImageMagick SVG to PNG scrambled outputImageMagick SVG 到 PNG 加扰输出
【发布时间】:2017-01-09 20:02:56
【问题描述】:

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

但它不是返回给我图像,而是返回给我:

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

我做错了什么?

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

http://prntscr.com/dtc9it

【问题讨论】:

  • 您在此处看到的内容看起来像是打印为文本的 JPEG 文件标题。您的 SVG 文件中有 JPEG 图像吗?
  • @PaulLeBeau 不,只有 SVG 标签,例如折线之类的东西......
  • @PaulLeBeau 现在我在我的问题中添加了一个 PNG。
  • 为什么我可以在您的输出中看到&lt;div&gt; 标签?请附上输出的 PNG 文件,而不是浏览器开发工具窗口的屏幕截图。
  • @PaulLeBeau 没有生成 PNG。浏览器中也是这样出现的……

标签: html svg


【解决方案1】:

我想通了。

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

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

输出的图像是空白的,因为 svg 末尾有一个 &lt;br&gt; 标签,我忘记删除了。现在可以了。

这是完整的代码(已验证)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    • 2015-11-18
    • 2015-04-04
    相关资源
    最近更新 更多