我正在尝试找到一种干净且一致的方法来将画布的内容下载为图像文件。
对于 Chrome 或 Firefox,我可以执行以下操作
// Convert the canvas to a base64 string
var image = canvas.toDataURL();
image = image.replace(/^data:[a-z]*;/, 'data:application/octet-stream;');
// use the base64 string as the 'href' attribute
var download = $('<a download="' + filename + '" target="_blank" href="' + image + '">');
由于上述在 IE 中不起作用,我正在尝试使用“window.navigator.msSaveOrOpenBlob”函数构建一个 Blob。
var image = canvas.toDataURL();
image = image.replace(/^data:[a-z]*;,/, '');
// Convert from base64 to an ArrayBuffer
var byteString = atob(image);
var buffer = new ArrayBuffer(byteString.length);
var intArray = new Uint8Array(buffer);
for (var i = 0; i < byteString.length; i++) {
intArray[i] = byteString.charCodeAt(i);
}
// Use the native blob constructor
blob = new Blob([buffer], {type: "image/png"});
// Download this blob
window.navigator.msSaveOrOpenBlob(blob, "test.png");
在上面的例子中,我真的必须将canvas转换为base64,将base64转换为ArrayBuffer,最后从base64转换为blob吗?(Firefox 有一个 'canvas.toBlob' 功能,但同样在 IE 中不可用)。此外,这仅适用于 IE10,不适用于 IE9。
是否有人对适用于 Chrome、Safari、Firefox、IE9 和 IE10 的解决方案有任何建议?