将svg保存为磁盘png映像 - 浏览器差异

时间:2014-09-11 13:44:34

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

我正在尝试保存到文件,作为png图像,使用d3.js创建的svg图。此代码在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缺少一些数据,但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

正如所建议的那样,.click()方法对于firefox失败了。但window.open(a.href, "_blank");将起作用并打开一个包含图像的新窗口。您可以右键单击以保存它。