javascript - 无法在 Edge 浏览器上将 Canvas 另存为图像

标签 javascript canvas html5-canvas fabricjs

我正在为我的网络应用程序使用 fabric js。为了使用 fabric js 将 HTML5 canvas 保存为图像,我发现以下代码适用于 chrome 和 firefox 浏览器。但是当我在 Microsoft Edge 中运行相同的代码时,浏览器只会打开一个空白的新窗口,上面没有任何图像。

 $(".save").click(function () {
    canvas.deactivateAll().renderAll();
    window.open(canvas.toDataURL('png'));
});

不过,我还测试了许多展示如何将 Canvas 转换为图像的 fiddle 项目。这些 fiddle 适用于 chrome 但不适用于边缘。一个示例 fiddle 是 here

最佳答案

如果您将使用 FileSaver.js,它将在 Edge 上下载。要使用 FileSaver.js,您需要将 base64 数据转换为 blob 数据。为此,请检查 this post on StackOverflow

这是更新的 fiddle

您需要将 FileSaver.js 包含到您的项目中,您的保存按钮将包含以下代码:

$("#canvas2png").click(function(){
    canvas.isDrawingMode = false;

    if(!window.localStorage){alert("This function is not supported by your browser."); return;}

    var blob = new Blob([b64toBlob(canvas.toDataURL('png').replace(/^data:image\/(png|jpg);base64,/, ""),"image/png")], {type: "image/png"});
      saveAs(blob, "testfile1.png");
});

另一种快速而肮脏的解决方案是将 html 数据写入新选项卡,然后右键单击图像并保存。此解决方案不需要任何插件或库。

您的保存将简单地更改为:

  $("#canvas2png").click(function(){
    canvas.isDrawingMode = false;

    if(!window.localStorage){alert("This function is not supported by your browser."); return;}

       var html="<img src='"+canvas.toDataURL()+"' alt='canvas image'/>";
        var newTab=window.open();
        newTab.document.write(html);
});

关于javascript - 无法在 Edge 浏览器上将 Canvas 另存为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45197097/

相关文章:

javascript - 从视频创建的 Canvas 在保存时出现 "Tainted canvases may not be exported."错误

javascript - Chart.js - 同一 Canvas 上的多个圆环图

javascript - 如何在 Canvas 上的图像上执行 "paint"?

javascript - 在 Canvas 上绘制多个图像,每个图像都旋转

javascript - Jquery/Javascript 不激活 gif 图像(仅限 Firefox)

javascript - HTML <audio> 元素未进入 Firefox 中的 readyState 4

javascript - 当浏览器支持新选项卡时,如何强制 window.open() 打开新选项卡?

javascript - 为 iFrame 加载 GIF

javascript - 如何在fabric.js中对视频进行效果

javascript - 将大量数据从 Web 服务器传输到客户端