DataURL, Blob, File, Image之間的關係與轉換

使用前景:javascript

移動端上傳拍照圖片太大,使用canvas壓縮後base64=>blob二進制表單文件=>ajax-POST上傳 java

// canvas轉dataURL:canvas對象、轉換格式、圖像品質
function canvasToDataURL(canvas, format, quality) {
    return canvas.toDataURL(format||'image/jpeg', quality||1.0);
}
// DataURL轉canvas
function dataURLToCanvas(dataurl, cb){
    var canvas = document.createElement('CANVAS');
    var ctx = canvas.getContext('2d');
    var img = new Image();
    img.onload = function(){
        canvas.width = img.width;
        canvas.height = img.height;
        ctx.drawImage(img, 0, 0);
        cb(canvas);
    };
    img.src = dataurl;
}
// image轉canvas:圖片地址
function imageToCanvas(src, cb){
    var canvas = document.createElement('CANVAS');
    var ctx = canvas.getContext('2d');
    var img = new Image();
    img.src = src;
    img.onload = function (){
        canvas.width = img.width;
        canvas.height = img.height;
        ctx.drawImage(img, 0, 0);
        cb(canvas);
    };
}
// canvas轉image
    function canvasToImage(canvas){
        var img = new Image();
        img.src = canvas.toDataURL('image/jpeg', 1.0);
        return img;
    }
// File/Blob對象轉DataURL
    function fileOrBlobToDataURL(obj, cb){
        var a = new FileReader();
        a.readAsDataURL(obj);
        a.onload = function (e){
            cb(e.target.result);
        };
    }
// DataURL轉Blob對象
    function dataURLToBlob(dataurl){
        var arr = dataurl.split(',');
        var mime = arr[0].match(/:(.*?);/)[1];
        var bstr = atob(arr[1]);
        var n = bstr.length;
        var u8arr = new Uint8Array(n);
        while(n--){
            u8arr[n] = bstr.charCodeAt(n);
        }
        return new Blob([u8arr], {type:mime});
    }
// Blob轉image
    function blobToImage(blob, cb){
        fileOrBlobToDataURL(blob, function (dataurl){
        var img = new Image();
            img.src = dataurl;
            cb(img);
        });
    }
// image轉Blob
    function imageToBlob(src, cb){
        imageToCanvas(src, function (canvas){
            cb(dataURLToBlob(canvasToDataURL(canvas)));
        });
    }
// Blob轉canvas
    function BlobToCanvas(blob, cb){
        fileOrBlobToDataURL(blob, function (dataurl){
            dataURLToCanvas(dataurl, cb);
        });
    }
// canvas轉Blob
function canvasToBlob(canvas, cb){
	cb(dataURLToBlob(canvasToDataURL(canvas)));
}
// image轉dataURL 
function imageToDataURL(src, cb){
	imageToCanvas(src, function (canvas){
		cb(canvasToDataURL(canvas));
	});
}
// dataURL轉image,這個不須要轉,直接給了src就能用 
function dataURLToImage(dataurl){
	var img = new Image();
	img.src = d;
	return img;
}
相關文章
相關標籤/搜索