方式1
Navigator 对象包含有关浏览器的信息。
navigator.mediaDevices.getUserMedia();//获取一个媒体流
开启摄像头简单代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
</head>
<body>
<div>
<div id="play">开启摄像</div>
<div id="take">拍照</div>
<video id="video"></video>
<!-- 尽量在canvas标签上设置宽高 -->
<canvas id="canvas" width="300px" height="300px"></canvas>
</div>
<script>
// 开启摄像
document.getElementById('play').onclick = () => {
//获取媒体流
navigator.mediaDevices.getUserMedia({
video: true //开启视频流
}).then(res => {
//将返回值给video设置上
//src 是播多媒体文件的;srcobj 是实时流
document.getElementById('video').srcObject = res
//将video启动
document.getElementById('video').play()
})
// 失败就失败了
}
// 拍照、canvas绘制
document.getElementById('take').onclick = () => {
let ctx = document.getElementById("canvas").getContext('2d')
//将获取的图片生成照片
ctx.drawImage(document.getElementById("video"), 0, 0, 300, 300)
document.getElementById("canvas")
}
</script>
</body>
自动获取摄像头
<body>
<video id="video"></video>
<canvas id="canvas"></canvas>
<div id="div" style="background:rosybrown;width: 200px;height: 200px">开启摄像头</div>
<div id="div1" style="background:rosybrown;width: 200px;height: 200px">拍照</div>
</body>
<script>
var video = document.getElementById('video');
var div = document.getElementById('div');
var div1 = document.getElementById('div1');
var canvas = document.getElementById('canvas');
var deviceInfoId = ""; //摄像头ID
let num = 0; //摄像头数量
let carema = []; //摄像头ID数组
//在页面加载完成后获得设备ID数组
window.onload = navigator.mediaDevices.enumerateDevices().then(res => {
//res是全部的外设 找到摄像头的外设存下来
for (let i = 0; i < res.length; ++i) {
if (res[i].kind === 'videoinput') {
carema.push(res[i].deviceId)
}
}
deviceInfoId = carema[1];//第二个id当做默认摄像头 0索引获取不到 1是前置 2是后置
})
div.onclick = () => {
//navigator.userAgent可以获取打开的设备
var ua = navigator.userAgent.toLowerCase();
if (ua.match("android") == "android") {
alert("android");
}
//获取媒体流
navigator.mediaDevices.getUserMedia({
//通过deviceId获取摄像头
video: {deviceId: deviceInfoId,}
}).then(res => {
video.srcObject = res;
video.play();
})
}
div1.onclick = () => {
let ctx = canvas.getContext('2d');
ctx.drawImage(document.getElementById("video"), 0, 0, 200, 200);
//将图片转成Base64加密数据 可以传给后端让后端解析
var data = canvas.toDataURL("image/png");
}
</script>
方式2
通过input调取摄像头进行拍照
accept表示,直接打开系统文件目录。让你进行选择
capture如果没有会让你进行选择文件或者打开相机 设置后会直接打开相机
//直接打开相机拍照
<input type="file" accept="image/*" capture="camera">
//直接打开摄像机
<input type="file" accept="video/*" capture="camcorder">
//这个好像会也会打开相机
<input type="file" accept="audio/*" capture="microphone">