html调用电脑摄像头并拍照


<html>
	<head>
		<meta charset="utf-8" />
		<title>拍照测试</title>

	</head>
	<body>
		<div>
			<select id="select" onChange="change();"></select>
			<button onclick="openVideo()" ;>打开摄像头</button>
			<button onclick="closeVideo()" ;>关闭摄像头</button>
			<button id="snap">拍照</button>
		</div>
		<div>
			<video id="video" width="640" height="480" autoplay></video>
			<canvas id="canvas" width="640" height="480"></canvas>
		</div>
		<script>
			var video = document.getElementById('video');
			var select = document.getElementById('select');

			function openVideo() {

				navigator.mediaDevices.enumerateDevices().then(function(devices) {
					debugger
					devices.forEach(function(device) {
						if (device.kind === "videoinput") {

							var option = document.createElement('option');
							option.value = device.deviceId;
							option.text = device.label + '摄像头' + (select.length + "1");
							select.appendChild(option);
						}
					});
					change();
				});
			}

			const canvas = document.getElementById('canvas');
			const context = canvas.getContext('2d');
			// 当按钮被点击时拍照
			document.getElementById('snap').addEventListener('click', function() {
				context.drawImage(video, 0, 0, canvas.width, canvas.height);
			});





			function closeVideo() {

				var stream = video.srcObject;
				stopMediaStream(stream);
				video.srcObject = null;


			}

			// 关闭摄像头的函数
			function stopMediaStream(stream) {
				if (stream) {
					stream.getTracks().forEach(function(track) {
						track.stop(); // 停止所有的track
					});
				}
			}


			function change() {
				var deviceId = select.value;
				navigator.mediaDevices.getUserMedia({
						video: {
							deviceId: deviceId
						}
					})
					.then(function(stream) {
						video.srcObject = stream;
						video.play();
					}).catch(function(err) {
						console.error("摄像头访问错误:", err);
					});
			}
		</script>
	</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值