zoukankan      html  css  js  c++  java
  • [转]使用jquery-webcam插件,实现人脸采集并转base64

    项目需求:在ie或chrome浏览器下,调用电脑摄像头(确保使用的是笔记本电脑,或者摄像头功能正常使用的台式机),进行人脸图像采集预览,并将图片的base64码传入到后台进行后续操作。该demo适用于chrome和ie10以上,ie10以下版本的未测试。

    前期插件准备

    • jquery:1.5版本以上即可
    • jquery-webcam:github地址, 作者主页地址这里。该插件下载好后我们需要如下四个文件并与下面测试的HTML放在同一目录下:

    测试页面

    测试前注意事项:

      • 测试html文件必须使用http请求方式打开,不可以通过本地file://请求直接打开,会报错:webcam.capture is not a function
      • 在进行chrome和ie同时调试,或者打开多个页面调试的时候,务必关闭前一页面,解除前页面对摄像头的占用,否则后一页面调用摄像头后会显示黑屏或白屏
      • 因为console.log打印的日志长度是有限制的,所以直接通过console.log打印的base64码是不完整的,因此将该base64码复制到浏览器地址栏打开进行图像预览的时会无法显示图片。
        解决办法:我们可以将完整的base64码直接设置给预览img的src,然后通过开发者工具F12取得的base64码便是完整的

    `base64image.setAttribute('src', base64);`

    html代码:
    以下代码是基于原作者的demo页进行的部分修改,并使用了两种预览模式(canvas和img),根据需求选择使用

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <title>webcam</title>
            <style type="text/css">
                #webcam {
                     auto;
                    height: auto;
                    float: left;
                }
                #base64image {
                    display: block;
                     320px;
                    height: 240px;
                }
            </style>
    
            <!-- 基本的jquery引用,1.5版本以上 -->
            <script src="jquery-1.8.3.min.js"></script>
    
            <!-- webcam插件引用 -->
            <script src="jquery.webcam.js"></script>
    
        </head>
    
        <body>
    
            <div id="webcam"></div>
            <canvas id="canvas" width="320" height="240"></canvas>
            <input id="snapBtn" type="button" value="拍照" />
            <img id="base64image" src='' />
    
            <script type="text/javascript">
                var pos = 0,
                    ctx = null,
                    image = [];
                var w = 320;
                var h = 240;
                $(document).ready(function() {
    
                    jQuery("#webcam").webcam({
    
                         320,
                        height: 240,
                        mode: "callback",
                        swffile: "jscam_canvas_only.swf", // 这里引入swf文件,注意路径
                        onTick: function(remain) {},
                        onSave: function(data) {
    
                            var col = data.split(";");
                            var img = image;
    
                            for(var i = 0; i < 320; i++) {
                                var tmp = parseInt(col[i]);
                                img.data[pos + 0] = (tmp >> 16) & 0xff;
                                img.data[pos + 1] = (tmp >> 8) & 0xff;
                                img.data[pos + 2] = tmp & 0xff;
                                img.data[pos + 3] = 0xff;
                                pos += 4;
                            }
    
                            if(pos >= 4 * 320 * 240) {
                            
                                // 将图片显示到canvas中
                                ctx.putImageData(img, 0, 0);
                                
                                // 取得图片的base64码
                                var base64 = canvas.toDataURL("image/png");                    
    
                                // 将图片base64码设置给img
                                var base64image = document.getElementById('base64image');                                                              
                                base64image.setAttribute('src', base64);
    
                                pos = 0;
    
                            }
    
                        },
    
                        onCapture: function() {
                            webcam.save();
                            // Show a flash for example
                        },
    
                        debug: function(type, string) {
                            console.log('type:' + type + ',string:' + string);
                            // Write debug information to console.log() or a div
                        },
    
                        onLoad: function() {
                            // Page load
                        }
    
                    });
                    window.addEventListener("load", function() {
    
                        var canvas = document.getElementById("canvas");
    
                        if(canvas.getContext) {
                            ctx = canvas.getContext("2d");
                            ctx.clearRect(0, 0, 320, 240);
    
                            var img = new Image();
                            img.onload = function() {
                                ctx.drawImage(img, 129, 89);
                            }
                            image = ctx.getImageData(0, 0, 320, 240);
                        }
    
                    }, false);
    
                    $('#snapBtn').on('click', function() {
                        webcam.capture();
                    });
                });
            </script>
        </body>
    
    </html>
  • 相关阅读:
    haproxy 2.5 发布
    cube.js sql 支持简单说明
    基于graalvm 开发一个cube.js jdbc driver 的思路
    apache kyuubi Frontend 支持mysql 协议
    oceanbase 资源池删除说明
    基于obd 的oceanbase 扩容说明
    jfilter一个方便的spring rest 响应过滤扩展
    cube.js schema 定义多datasource 说明
    typescript 编写自定义定义文件
    meow 辅助开发cli 应用的工具
  • 原文地址:https://www.cnblogs.com/Violety/p/10320284.html
Copyright © 2011-2022 走看看