js如何调用电脑的摄像头

本文介绍如何使用JavaScript和HTML创建一个简单的应用,通过浏览器的摄像头功能获取视频流并实时绘制到canvas上,适合于头像上传和即时拍照场景。注意,代码需部署在服务器以调用摄像头,探讨了浏览器安全隐私限制。
摘要由CSDN通过智能技术生成

闲来无事,用js写了一个调用摄像头的demo,并用canvas显示保存。这个功能很实用,比如上传用户的头像,即时拍照及时上传。
Html:

<video width="200px" height="150px"></video>
<canvas width="200px" height="150px"></canvas>
<p>
	<button id="start">打开摄像头</button>
	<button id="snap">截取图像</button>
	<button id="close">关闭摄像头</button>
</p>

JavaScript:

window.onload = function () {
	var canvas = document.getElementsByTagName('canvas')[0],
		context = canvas.getContext('2d'),
		video = document.getElementsByTagName("video")[0],
		snap = document.getElementById("snap"),
		close = document.getElementById("close"),
		start = document.getElementById("start"),
		MediaStreamTrack;
	start.addEventListener('click', function () {
		if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
			navigator.mediaDevices.getUserMedia({
					video: true,
					audio: true
			}).then(function (stream) {
					console.log(stream);
					MediaStreamTrack=typeof stream.stop==='function'?stream:stream.getTracks()[1];
					video.src=(window.URL).createObjectURL(stream);
					video.play();
			}).catch(function(err){
					console.log(err);
			});
		}else if(navigator.getMedia){
			navigator.getMedia({
				video: true
			}).then(function (stream) {
				console.log(stream);
				MediaStreamTrack=stream.getTracks()[1];
				video.src=(window.webkitURL).createObjectURL(stream);
				video.play();
			}).catch(function(err){
				console.log(err);
			});
		}
	});
	snap.addEventListener('click', function () {
		context.drawImage(video, 0, 0,200,150);
	});
	close.addEventListener('click', function () {
		MediaStreamTrack && MediaStreamTrack.stop();
	});
}

总结:上面这个Demo主要用到浏览器的摄像头组件,然后再将图片源赋给canvas。其中遇到一个坑:代码需要托管到服务器端,即在客户端访问才能调用浏览器成功。这种禁止本地调用的做法可能是出于浏览器的安全性和用户的隐私考虑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值