gpt4 book ai didi

javascript - PHP 从 SVG 中读取 ImageBlob

转载 作者:行者123 更新时间:2023-11-30 00:32:25 26 4
gpt4 key购买 nike

我正在使用 Raphael JS 客户端将图表呈现为 SVG。但是,我希望图表可以下载,而 SVG 不允许这样做。首先,我尝试使用数据 uri 将 svg 渲染为 png:

var $svg = this.$chart.children("svg");
var img = new Image();
img.setAttribute("download", "chart.png");
var that = this;
img.onload = function() {
that.$chart.append(img);
};
img.src = "data:image/svg+xml;utf8,"+$svg[0].outerHTML;

这没有用,因为我使用的图像和渐变没有被渲染。

现在我正在进行 API 调用,将 SVG 作为 POST 数据发送,并尝试使用 imagick 将 SVG 转换为 PNG。可以找到 SVG 转储 here (供引用)。

这是我正在处理的 PHP 脚本:

header('Content-Type: image/png');
$svg = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" . urldecode($_POST["imagedata"]);
error_log($svg);
$image = new IMagick();
$image->setBackgroundColor(new ImagickPixel('transparent'));
$image->readImageBlob(urldecode($svg));
$image->setImageFormat("png32");
echo $image->getImageBlob();

上面的 GIST 是 error_log 调用的输出。调用此脚本时,我在 AJAX 调用中收到 500 错误,PHP 服务器给出此错误:

\nFatal error: Uncaught exception 'ImagickException' with message 'Unable to read image blob' in :\nStack trace:\n#0 file.php(30): Imagick->readImageBlob()\n#1 {main}

我将不胜感激,可以通过多种方式解决此问题。转换为图像的更好方法,调试“错误”svg 文件的方法(也许通过 readImageBlob 的错误日志?),等等。

最终,我只是没有足够的信息来了解 readingImageBlob 出了什么问题。 SVG 显然是正确的……我猜。它在浏览器中正确呈现。我只是不确定如何调试这个读取函数。

最佳答案

在将 SVG 转换为 PNG 时,我遇到了同样的 ImagickException Unable to read image blob。问题是我的服务器上没有安装“ghostscript”。

apt-get install ghostscript 为我解决了这个问题。

关于javascript - PHP 从 SVG 中读取 ImageBlob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28882468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com