保存画布对象有哪些不同方法?
在我的研究中,我发现了两种方法:
var data = canvas.toDataURL();
var prev = window.location.href;
window.location.href = data.replace("image/png", "image/octet-stream");
window.location.href = prev;
另一种方法是拍摄快照。
还有其他方法可以做到这一点吗?
可以自定义下载文件名吗?
需要无按钮的解决方案:
var download = function(){
var link = document.createElement('a');
link.download = 'filename.png';
link.href = document.getElementById('canvas').toDataURL()
link.click();
}
如果您有其他下载触发器或无法轻松引用的触发器,则非常有用。
保存的一种方法是导出为图像...您已经找到了这个解决方案,并且这是我认为最好的解决方案;)
var canvas = document.getElementById("mycanvas");
var img = canvas.toDataURL("image/png");
document.write('<img src="'+img+'"/>');
您可以使用不同的图像类型。更改此函数中的 mimetype:
canvas.toDataURL("image/jpeg");
另一种保存画布数据(保存为 PDF)的方法是使用 wkhtmltopdf 库
干杯。弗兰克
frankneff.ch / @frankneff
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>
尝试这样的事情...
function downloadCanvasAsImage(){
let canvasImage = document.getElementById('canvas').toDataURL('image/png');
// this can be used to download any image from webpage to local disk
let xhr = new XMLHttpRequest();
xhr.responseType = 'blob';
xhr.onload = function () {
let a = document.createElement('a');
a.href = window.URL.createObjectURL(xhr.response);
a.download = 'image_name.png';
a.style.display = 'none';
document.body.appendChild(a);
a.click();
a.remove();
};
xhr.open('GET', canvasImage); // This is to download the canvas Image
xhr.send();
}
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();
我希望这些代码能够工作。但首先在canvas标签中创建Anchor标签,其id为“cropImageLink”。比检查后。但它在 IE 浏览器中不起作用
您可以使用 reimg 库来轻松完成此操作。
将画布转换为 img :
ReImg.fromCanvas(document.getElementById('yourCanvas')).toPng()
为用户下载该图像可以这样完成:
ReImg.fromCanvas(document.getElementById('canvas')).downloadPng()
关于为文件指定自定义名称,如果您查看库的代码(非常简短且易于理解),您会发现可以更改名称。
这是具体行的链接:https://github.com/gillyb/reimg/blob/master/reimg.js#L63
filename = filename || 'image.png';
与this相关并感谢@kaiido
我刚刚修改了回调方法,它起作用了,上面提到的回调方法对我不起作用
var callback = function(blob) {
var a = document.createElement('a');
var saveAs = $('input[name="group1"]:checked').val();
var link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = 'Image.' + saveAs;
document.body.appendChild(link);
link.click();
};
function dataURIToBlob(dataURI, callback) {
var binStr = atob(dataURI.split(',')[1]),
len = binStr.length,
arr = new Uint8Array(len);
for (var i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i);
}
callback(new Blob([arr]));
}
Chromium DevTools > 检查画布标签 > “捕获节点屏幕截图”,您可以将其粘贴到任何地方以进行简单快速的查看。