Javascript Blob的数据URI会损坏图像

Javascript Blob的数据URI会损坏图像,javascript,html,Javascript,Html,我已经看过很多关于这个的帖子和无数的答案,但我不能完全让它起作用 我有一个画布,我保存了一个基本64编码的图像,这是伟大的作品 capture: function(callback) { var ctx, imgData, src; ctx = canvas.getContext("2d"); ctx.drawImage(video, 0, 0, video.width, video.height); imgData = ctx.getImageData(0, 0

我已经看过很多关于这个的帖子和无数的答案,但我不能完全让它起作用

我有一个画布,我保存了一个基本64编码的图像,这是伟大的作品

capture: function(callback) {
    var ctx, imgData, src;
    ctx = canvas.getContext("2d");
    ctx.drawImage(video, 0, 0, video.width, video.height);
    imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
    ctx.putImageData(imgData, 0, 0);
    src = canvas.toDataURL("image/jpeg");
    return src;
  }
然后我可以将图像src设置为base64编码字符串,一切都很好。当我试图将其转换为blob以便下载时,下载的文件将无法作为图像格式读取

saveImage: function(dataURI) {
    var ab, bb, blob, byteString, i, ia, mimeString, _i, _len;
    if (dataURI.split(',')[0].indexOf('base64') >= 0) {
      byteString = atob(dataURI.split(',')[1]);
    } else {
      byteString = unescape(dataURI.split(',')[1]);
    }
    mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
    ab = new ArrayBuffer(byteString.length);
    ia = new Uint8Array(ab);
    for (_i = 0, _len = byteString.length; _i < _len; _i++) {
      i = byteString[_i];
      ia[i] = byteString.charCodeAt(i);
    }
    bb = new BlobBuilder();
    bb.append(ab);
    blob = bb.getBlob(mimeString);
    return saveAs(blob);
  }
saveImage:function(dataURI){
变量ab、bb、blob、byteString、i、ia、模拟字符串、_i、_len;
if(dataURI.split(',')[0].indexOf('base64')>=0){
byteString=atob(dataURI.split(',)[1]);
}否则{
byteString=unescape(dataURI.split(',)[1]);
}
mimeString=dataURI.split(',')[0]。split(':')[1]。split(';')[0];
ab=新阵列缓冲区(byteString.length);
ia=新的UINT8阵列(ab);
对于(_i=0,_len=byteString.length;_i<_len;_i++){
i=通过测试环[_i];
ia[i]=byteString.charCodeAt(i);
}
bb=新的BlobBuilder();
bb.追加(ab);
blob=bb.getBlob(模拟字符串);
返回saveAs(blob);
}
所有这些代码对我来说都很好,但下载时生成的文件无法识别为有效图像

我感觉数据url中的转义错误,但我找不到位置


我正在使用Chrome Canary进行开发。

阅读
\u I
位置的字符码,而不是
I

  ia[_i] = byteString.charCodeAt(_i);

我有WebKitBlobBuilder,但没有BlobBuilder…如果你不愿意阅读它输出的JavaScript,那么女士们先生们就是CoffeeScript如何咬你的。