Firefox มีcanvas.toBlob ()และcanvas.mozGetAsFile ()วิธีการ
แต่เบราว์เซอร์อื่นไม่ทำเช่นนั้น
เราสามารถรับ dataurl จาก canvas แล้วแปลง dataurl ไปเป็นวัตถุ blob
นี่คือdataURLtoBlob()
หน้าที่ของฉัน มันสั้นมาก
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {type:mime});
}
ใช้ฟังก์ชันนี้กับ FormData เพื่อจัดการผืนผ้าใบหรือ dataurl ของคุณ
ตัวอย่างเช่น:
var dataurl = canvas.toDataURL('image/jpeg',0.8);
var blob = dataURLtoBlob(dataurl);
var fd = new FormData();
fd.append("myFile", blob, "thumb.jpg");
นอกจากนี้คุณสามารถสร้างHTMLCanvasElement.prototype.toBlob
วิธีการสำหรับเบราว์เซอร์เอ็นจิ้นตุ๊กแก
if(!HTMLCanvasElement.prototype.toBlob){
HTMLCanvasElement.prototype.toBlob = function(callback, type, encoderOptions){
var dataurl = this.toDataURL(type, encoderOptions);
var bstr = atob(dataurl.split(',')[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
var blob = new Blob([u8arr], {type: type});
callback.call(this, blob);
};
}
ตอนนี้canvas.toBlob()
ใช้ได้กับเบราว์เซอร์ที่ทันสมัยไม่เพียง แต่ Firefox เท่านั้น ตัวอย่างเช่น:
canvas.toBlob(
function(blob){
var fd = new FormData();
fd.append("myFile", blob, "thumb.jpg");
//continue do something...
},
'image/jpeg',
0.8
);