我已经在IE 10中读了一个堆栈溢出的问题,这个代码工作,但在ie9中没有用,
但我仍然面临着这个问题。
var image = canvas.toDataURL();
image = image.replace(/^data:[a-z]*;,/, '');
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);
}
blob = new Blob([buffer], {type: "image/png"});
window.navigator.msSaveOrOpenBlob(blob, "test.png");
在转换atob(图像)时会引发异常 0x800a139e - JavaScript运行时错误:InvalidCharacterError 我尝试了几件事,但没有任何作用......
我在图像变量中得到了这个
数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAGQCAYAAAA9XmC5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABJFSURBVHhe7dvPa5x3fsDxeaR0l3UO9dLuSnJLE3rpzc6pp0KUQ2MLL8Xk1BZWt + 7BhmKaGYctfKR3ng8vjyZTE6W5St98PZnF9ZO / NeZsiyWt0 + C // RUWQBHxIkQjlBGsEx7Eb / 7ZbqQF23zz22vvf + L6 + F / Um4BQDeNRqPtvMoy194TQsc5EcIRatv2SZnmY9L1HOOUuDPdADpJCOEIRfQex7BaviCzkXsRxwc5At3kyzJwxMoXZmZfdLnZ7 / c3yxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvkF6vf8DAs32KwowBEUAAAAASUVORK5CYII = 请帮我.. 提前谢谢..
答案 0 :(得分:4)
1)您的base64编码字符串可能不完全有效。您可以尝试使用此代码而不是atob
var decodeBase64 = function(s) {
var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
for(i=0;i<64;i++){e[A.charAt(i)]=i;}
for(x=0;x<L;x++){
c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
}
return r;
};
2)我认为它应该是image = image.replace(/^[^,]+,/, '');
3)据我所知,IE中Blob
的支持从版本10开始 - https://developer.mozilla.org/en-US/docs/Web/API/Blob
答案 1 :(得分:0)
万一有人碰到了这个问题,而image = image.replace(/^[^,]+,/, '');
解决方案不适用于他们,我在IE11中调用atob
函数时也会遇到同样的错误。
在我的情况下,该错误是由于base64字符串的回车符各有76个字符引起的。
对于Chrome或Firefox来说这不是问题,但IE11产生了InvalidCharacterError
。
b64Data = b64Data.replace(/\r\n/g, '');
解决了我的问题。