调用本地摄像头使用HTML5 Canvas拍照并转为base64格式的图片
利用navigator对象
navigator.mediaDevices.getUserMedia({ audio:true, video:true })
说明:
navigator.mediaDevices.getUserMedia({ audio: false, video: true }).then(function (result) { video.srcObject = result; })
h5利用canvas摄像拍照及转成base64格式,完成例子代码见下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>调用本地摄像头使用HTML5 Canvas拍照并转为base64格式的图片</title> </head> <body> <video muted autoplay='autoplay' id='video'></video> <canvas id="canvas4" width="484px" height="484px" hidden></canvas> <button id='control'>拍照</button> <script> var video = document.getElementById('video'); var audio, audioType; var canvas4 = document.getElementById('canvas4'); var context4 = canvas4.getContext('2d'); navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia || navigator.mediaDevices; window.URL = window.URL || window.webkitURL || window.mozURL || window.msURL; // var exArray = []; //存储设备源ID // MediaStreamTrack.getSources(function (sourceInfos) { // for (var i = 0; i != sourceInfos.length; ++i) { // var sourceInfo = sourceInfos[i]; // //这里会遍历audio,video,所以要加以区分 // if (sourceInfo.kind === 'video') { // exArray.push(sourceInfo.id); // } // } // }); function getMedia(){ if (navigator.getUserMedia) { navigator.getUserMedia({ 'video': true, }, successFunc, errorFunc); //success是获取成功的回调函数 } else { alert('Native device media streaming (getUserMedia) not supported in this browser.'); } } function successFunc(stream) { //alert('Succeed to get media!'); if (video.mozSrcObject !== undefined) { //Firefox中,video.mozSrcObject最初为null,而不是未定义的,我们可以靠这个来检测Firefox的支持 video.mozSrcObject = stream; } else { video.srcObject = stream; // video.src = window.URL && window.URL.createObjectURL(stream) || stream; } } function errorFunc(e) { alert('Error!' + e); } // 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果 function drawVideoAtCanvas(video, context) { window.setInterval(function () { context.drawImage(video, 0, 0, 800, 600); }, 60); } //拍照 function getPhoto() { context4.drawImage(video, 0, 0, 484 ,484); //将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。 var new_img = document.createElement('img'); new_img.setAttribute('crossOrigin', 'anonymous'); new_img.src = canvas4.toDataURL("image/jpeg");//图片转为base64格式 new_img.setAttribute('width',300) new_img.setAttribute('height',300) console.log(canvas4.toDataURL("image/jpeg")) document.body.appendChild(new_img) } getMedia() control.addEventListener('click',function(){ getPhoto() // drawVideoAtCanvas() }) </script> </body> </html>
效果截图:
自拍照想想还是删了。。。
结束。
参考自:https://blog.csdn.net/qq_40678503/article/details/96318365
例子代码亲测可用。