【问题标题】:Save Client Side Generated Image on Button Click在按钮单击时保存客户端生成的图像
【发布时间】:2015-08-18 04:54:09
【问题描述】:

我有一个IgniteUI igDataChart,我想将它作为图像保存到磁盘。您不能右键单击图表并保存图像,因为它使用了多个画布。然而,该图表确实有一个 export image 方法,该方法将获取整个图表图像并将其返回到一个 javascript 变量中。

我想通过单击按钮自动将此文件保存到用户的下载文件夹中。如果这是服务器端图像,我可以简单地将用户引导到适当的 url,但事实并非如此。

用户如何通过单击按钮下载此客户端生成的图表 png 图像?我需要一个跨浏览器解决方案。

JSFIDDLE

$(function () {
    $("#exportBtn").click(function(){
       //returns an image DOM element;
       var pngImage = $("#chart").igDataChart("exportImage");
       //now i need to download the image
    });
});

【问题讨论】:

标签: javascript jquery infragistics ignite-ui


【解决方案1】:

这个解决方案提供了更好的browser support 并且可以分配给一个按钮。 http://jsfiddle.net/koo2hv5t/7/

  1. 检查 blob 支持(您可以为旧浏览器或服务器端回退添加消息)
  2. 等到动画结束
  3. 使用igDataChart将图表复制为dataURL格式
  4. 使用Util.dataURLToBlobhttps://github.com/ebidel/filer.js 转换为blob
  5. saveAshttps://github.com/eligrey/FileSaver.js 将 blob 保存到一个文件中

    //check support
    try {
        var isFileSaverSupported = !! new Blob;
    } catch (e) {}
    
    setTimeout(function () {
        //add data to url
        function downloadCanvas(link, canv, filename) {
            if (isFileSaverSupported) {
                saveAs(Util.dataURLToBlob(canv.src), filename);
            }
        }
        $("#exportBtn").click(function () {
            downloadCanvas(this, $("#chart").igDataChart("exportImage", 800, 600), 'test.png');
        });
    }, 1000); //wait till animation end
    

【讨论】:

  • 这很好用。您可以只更新您的第一个答案,而不是提交一个新答案。
  • 我会做一些测试以确保它在所有情况下都能正常工作,然后将其标记为答案
  • Filesaver.js 有不错的浏览器支持。 Util.dataURLToBlob 仅在 Chrome 上受支持,但它似乎也适用于 IE,因此这似乎与我将获得的跨浏览器解决方案一样好,直到 IE 完全支持 HTML 5。感谢您提供良好的信息和努力。
【解决方案2】:

您可以通过以下方式进行:

  1. 等到动画结束
  2. 复制最后一张中的所有画布
  3. 将数据分配给 url(不是按钮)

    setTimeout(function () {
        var c = $("#chart canvas"); //get handle to all canvas
        var ctx = c[c.length - 1].getContext('2d');
        for (i = 0; i < c.length - 1; i++) { //add all canvas to the last one
            ctx.drawImage(c[i], 0, 0);
        }
        for (i = 0; i < c.length - 1; i++) { //remove the duplicates
            c[i].remove();
        }
        //add data to url
        function downloadCanvas(link, canv, filename) {
            link.href = canv.toDataURL();
            link.download = filename;
        }
        $("#dl1").click(function () {
            downloadCanvas(this, c[2], 'test.png');
        });
    
    }, 1000); //wait till animation end
    

http://jsfiddle.net/koo2hv5t/1/

【讨论】:

  • 关于等待动画结束的好处。有没有办法将它与 exportImage 方法一起使用?
  • 这很好用,但不是在 IE 中,也不是在按钮单击上。下载属性是相当新的,IE 还不支持:w3schools.com/jsref/prop_anchor_download.asp
  • 是的,就像我说的那样,它只适用于 url,而 IE 在 HTML5 功能方面有很多限制......这可能是你需要的 github.com/eligrey/FileSaver.js
  • 好的。感谢您迄今为止的所有帮助,我会看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2017-07-17
  • 2018-09-30
  • 2015-02-23
  • 2023-03-08
  • 2020-03-02
相关资源
最近更新 更多