上述两种方式涉及到的格式转换分别为:
获取摄像头: 摄像头视频流(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