如何使用canvas.toDataURL()将canvas保存为图像?

我目前正在构build一个HTML5的Web应用程序/ Phonegap原生应用程序,我似乎无法弄清楚如何将canvas作为一个图像保存到canvas.toDataURL() 。 有人能帮我吗?

这是代码,它有什么问题?

//我的canvas被命名为“canvasSignature”

JavaScript的:


 function putImage() { var canvas1 = document.getElementById("canvasSignature"); if (canvas1.getContext) { var ctx = canvas1.getContext("2d"); var myImage = canvas1.toDataURL("image/png"); } var imageElement = document.getElementById("MyPix"); imageElement.src = myImage; } 

HTML5:


 <div id="createPNGButton"> <button onclick="putImage()">Save as Image</button> </div> 

这是一些代码。 没有任何错误。

 var image = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"); // here is the most important part because if you dont replace you will get a DOM 18 exception. window.location.href=image; // it will save locally 

你可以使用canvas2image来提示下载。

我有同样的问题,这里有一个简单的例子,它将图像添加到页面,并强制浏览器下载它:

 <html> <head> <script src="proj/canvas2image/canvas2image.js"></script> <script> function draw(){ var canvas = document.getElementById("thecanvas"); var ctx = canvas.getContext("2d"); ctx.fillStyle = "rgba(125, 46, 138, 0.5)"; ctx.fillRect(25,25,100,100); ctx.fillStyle = "rgba( 0, 146, 38, 0.5)"; ctx.fillRect(58, 74, 125, 100); } function to_image(){ var canvas = document.getElementById("thecanvas"); document.getElementById("theimage").src = canvas.toDataURL(); Canvas2Image.saveAsPNG(canvas); } </script> </head> <body onload="draw()"> <canvas width=200 height=200 id="thecanvas"></canvas> <div><button onclick="to_image()">Draw to Image</button></div> <image id="theimage"></image> </body> </html> 

我创build了一个小图书馆(与其他一些便利的转换)。 这叫做reimg ,使用起来非常简单。

ReImg.fromCanvas(yourCanvasElement).toPng()

这个工作对我来说:(只有谷歌铬)

 <html> <head> <script> function draw(){ var canvas = document.getElementById("thecanvas"); var ctx = canvas.getContext("2d"); ctx.fillStyle = "rgba(125, 46, 138, 0.5)"; ctx.fillRect(25,25,100,100); ctx.fillStyle = "rgba( 0, 146, 38, 0.5)"; ctx.fillRect(58, 74, 125, 100); } function downloadImage() { var canvas = document.getElementById("thecanvas"); var image = canvas.toDataURL(); var aLink = document.createElement('a'); var evt = document.createEvent("HTMLEvents"); evt.initEvent("click"); aLink.download = 'image.png'; aLink.href = image; aLink.dispatchEvent(evt); } </script> </head> <body onload="draw()"> <canvas width=200 height=200 id="thecanvas"></canvas> <div><button onclick="downloadImage()">Download</button></div> <image id="theimage"></image> </body> </html> 

而不是imageElement.src = myImage; 你应该使用window.location = myImage;

甚至之后,浏览器将显示图像本身。 您可以右键单击并使用“保存链接”下载图像。

查看这个链接了解更多信息。

与1000bugy的答案类似,但更简单,因为您不必dynamic锚点和手动发送一个点击事件(加上一个IE修复)。

如果您将下载button设置为锚点,则可以在运行默认锚点function之前将其解压。 所以onAnchorClick你可以设置锚点href的canvasbase64图像和锚下载属性为任何你想命名你的形象。

这在(当前)IE中不起作用,因为它没有实现下载属性并阻止数据uris的下载。 但是,这可以通过使用window.navigator.msSaveBlob来解决。

所以你的锚点单击事件处理程序将如下(其中anchorcanvasfileName是范围查找):

 function onClickAnchor(e) { if (window.navigator.msSaveBlob) { window.navigator.msSaveBlob(canvas.msToBlob(), fileName); e.preventDefault(); } else { anchor.setAttribute('download', fileName); anchor.setAttribute('href', canvas.toDataURL()); } } 

这是一个小提琴

该解决scheme允许您更改下载的文件的名称:

HTML:

 <a id="link"></a> 

JAVASCRIPT:

  var link = document.getElementById('link'); link.setAttribute('download', 'MintyPaper.png'); link.setAttribute('href', canvas.toDataURL("image/png").replace("image/png", "image/octet-stream")); link.click(); 

@Wardenclyffe和SColvin,你们都试图用canvas来保存图像,而不是使用canvas'context。 你应该尝试ctx.toDataURL();

尝试这个 :

var canvas1 = document.getElementById(“yourCanvasId”);
var ctx = canvas1.getContext(“2d”);
var img = new Image();
img.src = ctx.toDataURL('image / png');
ctx.drawImage(IMG,200150);

你也可以参考下面的链接:

http://tutorials.jenkov.com/html5-canvas/todataurl.html

http://www.w3.org/TR/2012/WD-html5-author-20120329/the-canvas-element.html#the-canvas-element