【问题标题】:Save svg to disk as png image - browser discrepancy将svg作为png图像保存到磁盘 - 浏览器差异
【发布时间】:2014-11-05 11:59:06
【问题描述】:

我正在尝试将使用d3.js 创建的 svg 图保存到一个文件中,作为 png 图像。此代码在 Chrome 上运行良好(将文件保存到磁盘)但在 Firefox 32 上失败。任何想法为什么?

$(".savePNG").click (function() {
    var svg = ($("#svgContainer")[0]).getElementsByTagName("svg")[0];
    var svg_xml = (new XMLSerializer).serializeToString(svg);   // extract the data as SVG text
    var data_uri = "data:image/svg+xml;base64," + window.btoa(svg_xml);

    var image = new Image;
    image.src = data_uri;
    image.onload = function()
    {
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;

        var context = canvas.getContext("2d");
        context.clearRect(0, 0, image.width, image.height);
        context.drawImage(image, 0, 0);

        var a = document.createElement("a");
        a.download = "file.png";
        a.href = canvas.toDataURL("image/png");
        a.click ();
    };
});

如果它提供任何线索console.log (svg_xml.length + " " + data_uri.length);
在 Chrome 上返回 3501304 4668434,在 Firefox 上返回 3060753 4081030。所以看起来 Firefox 丢失了一些数据,但我不知道该怎么做。

【问题讨论】:

  • 在 FF 中,a.click() 失败。安全限制?

标签: javascript firefox svg d3.js xml-serialization


【解决方案1】:

正如建议的那样,.click() 方法在 Firefox 中失败。但是window.open(a.href, "_blank"); 将工作并打开一个包含图像的新窗口。可以右键保存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 2012-01-12
    • 1970-01-01
    • 2011-04-27
    • 2018-03-26
    相关资源
    最近更新 更多