将canvas作为图片下载
思路是将canvas转化为base64链接,通过模仿a标签的download属性进行下载
// https://stackoverflow.com/questions/18480474/how-to-save-an-image-from-canvasfunction download(canvas, filename) { var lnk = document.createElement('a'), e lnk.download = filename lnk.href = canvas.toDataURL('image/png;base64') if(document.createEvent) { e = document.createEvent('MouseEvents') e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null ) lnk.dispatchEvent(e) } else if(lnk.fireEvent) { lnk.fireEvent('onclick') }}
放一个html的Demo
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Download Cavans</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } html,body{ height: 100%; width: 100%; } .wrapper{ width: 100%; height: 100%; padding: 100px; display: flex; flex-direction: column; justify-content: space-around; align-items: center; } .button{ width: 100px; height: 40px; display: flex; justify-content: center; align-items: center; border: 1px solid #ddd; box-shadow: 2px 2px 14px #333; cursor: pointer; user-select: none; transition: all .3s; } .button:hover{ transform: skew(-15deg); } </style></head><body> <div class="wrapper"> <div class="button">Download</div> </div> <script> var wrapper = document.querySelector('.wrapper') var canvas = document.createElement('canvas') canvas.width = 500 canvas.height = 500 var ctx = canvas.getContext('2d') ctx.fillStyle = 'rgba(0, 0, 225, .6)' ctx.fillRect(0, 0, 500, 500) ctx.fillStyle = 'rgba(225, 0, 0, .6)' ctx.font = '600 40px Arial' ctx.fillText('Canvas', 100, 100) wrapper.appendChild(canvas) function download(canvas, filename) { var lnk = document.createElement('a'), e lnk.download = filename lnk.href = canvas.toDataURL('image/png;base64') if(document.createEvent) { e = document.createEvent('MouseEvents') e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null ) lnk.dispatchEvent(e) } else if(lnk.fireEvent) { lnk.fireEvent('onclick') } } document.querySelector('.button').onclick = () => { download(canvas, 'image.png') } </script></body></html>