Firefox에는 canvas.toBlob () 및 canvas.mozGetAsFile () 메소드가 있습니다.
그러나 다른 브라우저는 그렇지 않습니다.
캔버스에서 dataurl을 가져온 다음 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와 함께 사용하여 캔버스 또는 데이터 URL을 처리하십시오.
예를 들면 다음과 같습니다.
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
비 gecko 엔진 브라우저에 대한 메소드를 작성할 수 있습니다 .
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
);