Skip to content

Instantly share code, notes, and snippets.

@alex1504
Created August 22, 2017 09:05
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alex1504/631aff378bb345259216795b3effae24 to your computer and use it in GitHub Desktop.
Save alex1504/631aff378bb345259216795b3effae24 to your computer and use it in GitHub Desktop.
File、Blob、dataUrl、canvas之间的转换

File对象转换为dataURL、 Blob对象转换为dataURL

file对象继承自blob,转换方式相同

function readBlobAsDataURL(blob, callback) {
    var reader = new FileReader();
    reader.onload = function(e) {callback(e.target.result);};
    reader.readAsDataURL(blob);
}
//example:
readBlobAsDataURL(blob, function (dataurl){
    console.log(dataurl);
});
readBlobAsDataURL(file, function (dataurl){
    console.log(dataurl);
});

dataUrl转换为blob对象(通常用于图片数据传输)

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});
}
var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ==');

canvas转换为dataUrl

canvas.toDataURL('image/png');

dataUrl绘制到canvas

var img = new Image();
img.onload = function(){
  canvas.drawImage(img)
}
img.src = dataUrl

canvas转换为blob并通过ajax发送

var dataUrl = canvas.toDataURL('image/png');
var blob = dataURLtoBlob(dataurl);

// send ajax
var fd = new FormData();
fd.append("image", blob, "image.png");
var xhr = new XMLHttpRequest();
xhr.open('POST', '/server', true);
xhr.send(fd);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment