2014-04-18 84 views
15

我從顯示我的攝像頭的畫布上獲取DataURL。我把這個dataURL變成一個blob使用馬特的答案從這裏:How to convert dataURL to file object in javascript?HTML5/Javascript - DataURL到Blob和Blob到DataURL

如何將此blob轉換回相同的DataURL?我花了一天的時間研究這個問題,而且我覺得這沒有更好的記錄,除非我是盲目的。

編輯: 有

var urlCreator = window.URL || window.webkitURL; 
var imageUrl = urlCreator.createObjectURL(blob); 

但它只返回,似乎在本地文件指向一個非常短的URL,但我需要通過網絡發送的網絡攝像頭數據。

+1

或者如果有人知道任何其他兩種方法在DataURL和Blob之間進行轉換,我將非常感激。它在嘮叨我。 – spacecoyote

+1

甚至有可能將URL變成一個blob,通過網絡發送blob並將blob再次變成一個URL? 我有思維錯誤嗎? – spacecoyote

+1

因爲我嘗試壓縮dataURL字符串並以這種方式發送它似乎也失敗了,所以我會讓自己再次碰撞它。 – spacecoyote

回答

30

使用我的代碼在javascript中的dataURL和blob對象之間進行轉換。 (比鏈接中的代碼更好)。

//**dataURL to 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}); 
} 

//**blob to dataURL** 
function blobToDataURL(blob, callback) { 
    var a = new FileReader(); 
    a.onload = function(e) {callback(e.target.result);} 
    a.readAsDataURL(blob); 
} 

//test: 
var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ=='); 
blobToDataURL(blob, function(dataurl){ 
    console.log(dataurl); 
}); 
+0

這很好用!感謝你的分享。 – Jazzy

+0

我認爲對於'FileReader'來說並不明顯的事情是在調用'readAsDataURL'之前添加'onload'事件 – Jazzy