ユーザーが私のウェブサイトを使用しているときにユーザーの画面のスクリーンショットを撮り、html2canvasを使用してサーバーにアップロードしようとしています。これは、ChromeとFirefoxを使用しているデスクトップでうまく機能します(画面> html2canvas> imageURL> Unit8Array> Blob>アップロード)。
ただし、iPadでコードを実行すると、Blob作成コードがhtml2canvasの画像ファイルからの入力を台無しにしています。画像は、明らかな理由もなく、サイズが約40kから19バイトに縮小します。以下は私のコードです。
iPadの出力は、「*」を使用して強調表示されます。
var unit8 = new Uint8Array(imageArray);
var imgBlob;
// check length of encoded image
// *** On this iPad, this generates meaningful size eg 41240 ***
if(navigator.userAgent.match(/iPad/i) != null){
alert('length of the Unit8Array: ' + unit8.length);
}
if(typeof Blob !== 'undefined'){
// detect if Blob object is supported
// *** The iPad supports Blob object, it even support it's constructor ***
imgBlob = new Blob([unit8], {type: 'image/jpeg'});
} else if(window.BlobBuilder || window.MSBlobBuilder ||
window.WebKitBlobBuilder || window.MozBlobBuilder) {
// generating Blob - the old fashion way
// Not used by iPad
var blobBuilderObj = new (window.BlobBuilder || window.WebKitBlobBuilder ||
window.MozBlobBuilder || window.MSBlobBuilder)();
blobBuilderObj.append(unit8.buffer);
imgBlob = blobBuilderObj.getBlob('image/jpeg');
} else {
// Cannot generate Blob
alert('Error occurred during Blob generation');
return;
}
// check length of encoded image
// *** On the iPad imgBlob.size = 19 and imgBlob.toString() = [Object Blob] ***
if(navigator.userAgent.match(/iPad/i) != null){
alert('Before attach 1: length of the encoded message: ' + imgBlob.size +
', Blob content: ' + imgBlob.toString());
}
なぜですか?
どうもありがとう、ホイ