主要思想是借助Canvas自己的API - toDataURL()来实现,整个实现。运行效果如下


http://57xue.com/DemoHtml/CanvasDownLoadPic.html

    首先是在我们的html中需要有一个Canvas的元素啦,然后在Canvas中添加图片。其次就是将Canvas中的图片下载到本地来。

    1、在html中创建一个canvas的元素


 <canvas id="myCanvas" style="display:none" width="510px" height="510px"></canvas>
    2、对这个canvas载入图片


var can = document.getElementById('myCanvas');
var ctx = can.getContext('2d');
var imgA = new Image();
//图片地址
imgA.src = '/Maker/QRCodeShow';
imgA.onload = function() {
            ctx.drawImage(imgA,0,0);
            ctx.restore(); 
}
    在上面的这段js代码中我们创建了一个Image对象然后给定它的src在把这个Image渲染到我们的canvas画布中。


    3、将canvas中的图片下载下来。

    在上面的js代码中我们在渲染完的canvas读取出来(注意如果这个渲染的图片为跨出了这个域的图片则没法读取toDataURL()会失效的。)


 imgA.onload = function() {
            ctx.drawImage(imgA,0,0);
            ctx.restore();            
            can1 = document.getElementById('myCanvas');
            dataURL = can1.toDataURL('image/png');
        };
    最后下载图片。
function down() {
            dataURL = dataURL.replace("image/png", "image/octet-stream");
            var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
            save_link.href = dataURL;
            save_link.download = "XXXX.png";
            var event = document.createEvent('MouseEvents');
            event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
            save_link.dispatchEvent(event);
        }