我试图找到一种干净一致的方法来下载画布的内容作为图像文件。
对于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");
在上面的示例中,我真的需要将画布转换为base64,base64转换为ArrayBuffer,最后从base64转换为blob吗?(火狐有一个“canvas.toBlob”功能,但这在IE中是不可用的)。而且,这只适用于IE10,而不是IE9。
有谁对Chrome、Safari、Firefox、IE9和IE10的解决方案有什么建议吗?
发布于 2013-11-02 03:59:34
是的,你必须做所有额外的步法。
Chrome和FF中的toBlob
支持是最近才出现的,尽管它已经在规范中出现了好几年。最近,当MS制造IE9和10的时候,它甚至还没有出现在雷达上。
不幸的是,MS并没有改变IE9或IE10画布实现的意图,这意味着它们将以永恒的方式存在,存在着bug和缺失的部分。(IE10画布有几个IE9没有的bug,这些bug在IE11中再次修复。就像这块宝石。,这是一个真正的摇摇欲坠。
https://stackoverflow.com/questions/19736726
复制相似问题