上述兩種方式涉及到的格式轉換分別爲:
獲取攝像頭: 攝像頭視頻流(blob)-> canvas 圖像 -> blob 圖片 上傳服務器
圖片上傳: 上傳的圖片(file) -> base64圖片 -> canvas 圖像 -> blob 圖片 上傳服務器
具體獲取攝像頭的方法能夠參考:https://segmentfault.com/a/11...html
var dataurl = canvas.toDataURL('image/png'); var dataurl2 = canvas.toDataURL('image/jpeg', 0.8);
File對象也是一個Blob對象,兩者的處理相同。前端
function readBlobAsDataURL(blob, callback) { var a = new FileReader(); a.onload = function(e) {callback(e.target.result);}; a.readAsDataURL(blob); } //example: readBlobAsDataURL(blob, function (dataurl){ console.log(dataurl); }); readBlobAsDataURL(file, function (dataurl){ console.log(dataurl); });
先構造Image對象,src爲dataURL,圖片onload以後繪製到canvashtml5
var img = new Image(); img.onload = function(){ canvas.drawImage(img); }; img.src = dataurl;
仍是先轉換成一個url,而後構造Image對象,src爲dataURL,圖片onload以後繪製到canvasgit
利用上面的 readBlobAsDataURL 函數,由File,Blob對象獲得dataURL格式的url,再參考 dataURL圖片數據繪製到canvasgithub
readBlobAsDataURL(file, function (dataurl){ var img = new Image(); img.onload = function(){ canvas.drawImage(img); }; img.src = dataurl; });
轉換爲Blob對象後,能夠使用Ajax上傳圖像文件。ajax
先從canvas獲取dataurl, 再將dataurl轉換爲Blob對象canvas
var dataurl = canvas.toDataURL('image/png'); var blob = dataURLtoBlob(dataurl); //使用ajax發送 var fd = new FormData(); fd.append("image", blob, "image.png"); var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.send(fd);
具體過程和相關參考資料:
http://www.zhangxinxu.com/wor...
http://blog.csdn.net/cuixipin...
https://segmentfault.com/a/11...segmentfault