浏览器调用电脑摄像头拍照

最近公司要做的项目是一个人脸识别门禁系统,期间需要用到使用浏览器调用电脑摄像头拍照的功能,网上搜到的大多已经过时,调用不了,于是自己写了一个可以用的,分享一波。

  <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <video id="video" autoplay="" style='width:640px;height:480px'></video>
    <button id="start">开启摄像头</button>
    <button id='picture'>拍照</button>
    <canvas id="canvas" width="640" height="480"></canvas>
</body>
<script type="text/javascript">
    var video = document.getElementById("video");
    var context = canvas.getContext("2d")
    var start = document.getElementById("start");
    var errocb = function () {
        console.log('ok!');
    }
    start.onclick = function () {
        if (navigator.mediaDevices.getUserMedia) { // 标准的API
            var p = navigator.mediaDevices.getUserMedia({
                video: true
            });
            p.then(function (mediaStream) {
                var video = document.querySelector('video');
                video.src = window.URL.createObjectURL(mediaStream);
                video.onloadedmetadata = function (e) {
                    // Do something with the video here.
                    video.play();
                };
            });
            p.catch(function(err) { console.log(err.name); });
        } else if (navigator.mediaDevices.webkitGetUserMedia) { // WebKit 
            var p = navigator.mediaDevices.webkitGetUserMedia({
                video: true
            });
            p.then(function (mediaStream) {
                var video = document.querySelector('video');
                video.src = window.URL.createObjectURL(mediaStream);
                video.onloadedmetadata = function (e) {
                    // Do something with the video here.
                    video.play();
                };
            });
            p.catch(function(err) { console.log(err.name); });
        }
        document.getElementById("picture").addEventListener("click", function () {
            context.drawImage(video, 0, 0, 640, 480);
        });
    }
</script>

</html>

测试用的代码,主流的新版浏览器都可以用。

由于我这个管理系统采用的require+bootstrap,使用摄像头时还踩了一个小坑,报出了 “getContext is not define”的错误
解决方法是将 js代码直接写入canvas标签内,让js能够找到canvas对象

  <canvas>调用摄像头的js代码</canvas>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 快速入门 浏览器浏览器对象操作 DOM插入 DOM删除 DOM 操作表单获取值设置值HTML...
    染微言阅读 5,600评论 0 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,352评论 25 709
  • 1、MyApp、AimApp设置 2、现在就可进行跳转了 MyApp 跳转 AimApp,在MyApp中添加以下代...
    iOS_Xue阅读 2,738评论 0 1
  • 『外置的两块显示器到底该怎么摆放呢?』他陷入了深深的思考当中。
    SUN阅读 1,924评论 0 1
  • 都说人要聪明有智慧,要活的清楚明白透彻些,才有可能参透 了悟 活得松快。 怪我自己不长进 不够聪明有智慧,看似好像...
    凹造型可能会抽筋阅读 1,456评论 0 0