Downloading Canvas element to an image

2019-01-14 21:36发布

What are the different ways to save a canvas object?

In my research, I've found two approaches:

var data = canvas.toDataURL();
var prev = window.location.href;
window.location.href = data.replace("image/png", "image/octet-stream");
window.location.href = prev;

Another way is to take a snapshot.

Are there other ways to do this?

Is it possible to customize the download filename?

5条回答
地球回转人心会变
2楼-- · 2019-01-14 21:56

This solution is better:

function download(){
		var download = document.getElementById("download");
		var image = document.getElementById("myCanvas").toDataURL("image/png")
                    .replace("image/png", "image/octet-stream");
			  download.setAttribute("href", image);
			  //download.setAttribute("download","archive.png");
	}
<a id="download" download="triangle.png"><button type="button" onClick="download()">Download</button></a>
    
<canvas id="myCanvas" width="720" height="450">Your browser does not support Canvas.</canvas>

查看更多
叼着烟拽天下
3楼-- · 2019-01-14 21:58

Solution that doesn't require you to create a button.

var download = function(){
  var link = document.createElement('a');
  link.download = 'filename.png';
  link.href = document.getElementById('canvas').toDataURL()
  link.click();
}

Useful if you have other triggers for downloading, or triggers that you can't easily reference.

查看更多
一纸荒年 Trace。
4楼-- · 2019-01-14 22:00

The one way to save is exporting as an image... You already found this solution, and it's the best one i think ;)

    var canvas = document.getElementById("mycanvas");
    var img    = canvas.toDataURL("image/png");
    document.write('<img src="'+img+'"/>');

You can use different image types. Change the mimetype in this function:

    canvas.toDataURL("image/jpeg");

An other way to save canvas data (into a PDF) is using the wkhtmltopdf Library

Cheers. Frank

frankneff.ch / @frankneff

查看更多
萌系小妹纸
5楼-- · 2019-01-14 22:09
var c = document.getElementById("popup");
var link = document.getElementById('cropImageLink');
link.setAttribute('download', 'MintyPaper.png');
link.setAttribute('href', c.toDataURL("image/png").replace("image/png", "image/octet-stream"));
link.click();

I hope these code would be work. But first create Anchor tag in canvas tag whose id is 'cropImageLink'. than after check. but it's not working in IE browser

查看更多
虎瘦雄心在
6楼-- · 2019-01-14 22:09

You can use the reimg library to do this really easily.

Converting the canvas to an img : ReImg.fromCanvas(document.getElementById('yourCanvas')).toPng()

And downloading this image for the user can be done like this : ReImg.fromCanvas(document.getElementById('canvas')).downloadPng()

About giving the file a custom name, if you look into the code of the library (which is very short and simple to understand) you'll find that you can change the name.
Here is a link to the specific line: https://github.com/gillyb/reimg/blob/master/reimg.js#L56

查看更多
登录 后发表回答