4

元がバイナリ文字列に由来する配列バッファから Blob を構築しようとしています。Firefox と Chrome では正常に動作しますが、Safari と Opera では何が問題なのかわかりません

これは私の問題の簡易版です: http://plnkr.co/edit/sfEEHf?p=preview

// 1x1 red PNG pixle
base64 = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2P8z8DwHwAFBQIAHl6u2QAAAABJRU5ErkJggg==";
byteString = atob(base64);

// convert binary to array buff so we can construct a blob later
arrayBuffer = new ArrayBuffer(byteString.length);
intArray = new Uint8Array(arrayBuffer);

for (i = 0; i < byteString.length; i += 1) {
  intArray[i] = byteString.charCodeAt(i);
}

// construct blob
blob = new Blob([intArray], {type: "image/png"});
console.log(blob.size); // suppose to be 70 (its 19 in safari)
4

1 に答える 1

11

Safari では、TypedArray の 'buffer' プロパティを使用する必要があります。つまり、次のようになります。

blob = new Blob([intArray.buffer], {type: "image/png"});

そしてそれはうまくいくでしょう。

于 2013-07-03T02:03:36.323 に答える