zoukankan      html  css  js  c++  java
  • 通过HTML5的getUserMedia实现拍照功能

    参考HTML5Rocks的这篇文章实现的一个简单的例子

    思路如下:
    1. 把冰箱门打开
    2. 把大象放进冰箱里
    3. 把冰箱门关上

    好了不开玩笑了,其实思路是:
    1. 通过getUserMedia调用设备的摄像头(电脑、手机都可以,取决于浏览器对这个API的支持情况),并将资源放入video标签。
    2. 将video内的视频资源通过canvas的drawImage API放入canvas里,这个canvas是不显示的。
    3. 将canvas的内容转换成base64编码的webp格式的图像(如果浏览器不支持这个格式,会fallback到png格式)放入img里,于是你就能看到你拍的照片了。

    不废话了,上代码:

    HTML

    <!doctype html>
    <html>
    <head>
        <title>html5 capture test</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <video autoplay></video>
        <img src="">
        <canvas style="display: none;"></canvas>
        <button id="capture">snapshot</button>
    
    
        <script src="index.js"></script>
    </body>
    </html>
    

    JS

    var video = document.querySelector('video');
    var canvas = document.querySelector('canvas');
    var ctx = canvas.getContext('2d');
    var localMediaStream = null;
    
    var snapshot = function () {
        if (localMediaStream) {
            ctx.drawImage(video, 0, 0);
            document.querySelector('img').src = canvas.toDataURL('image/webp');
        }
    };
    
    var sizeCanvas = function () {
        setTimeout(function () {
            canvas.width = video.videoWidth;
            canvas.height = video.videoHeight;
            img.width = video.videoWidth;
            img.height = video.videoHeight;
        }, 100);
    };
    
    var btnCapture = document.getElementById('capture');
    btnCapture.addEventListener('click', snapshot, false);
    
    navigator.webkitGetUserMedia(
        {video: true},
        function (stream) {
            video.src = window.URL.createObjectURL(stream);
            localMediaStream = stream;
            sizeCanvas();
        },
        function () {
            alert('your browser does not support getUserMedia');
        }
    );
    

    几个注意事项:

    • 不同浏览器对getUserMedia的支持情况不同,需要加上前缀,比如webkitGetUserMedia、mozGetUserMedia、msGetUserMedia,如果你想屏蔽这一问题的话,可以这样做:
    // cross platforms
    var myGetUserMedia = navigator.getUserMedia || 
                     navigator.webkitGetUserMedia ||
                     navigator.mozGetUserMedia || 
                     navigator.msGetUserMedia;
    
    • Chrome对file:///做了很多的限制,跨域就不说了,geolocation也不能在本地下使用,这个getUserMedia也是。
    • 这个sizeCanvas函数做的事情就是保证你拍到的照片的大小和摄像头拍到的大小是一样的,否则会出现拍到的照片只有摄像头录到的一部分画面的情况。

    本文转载于猿2048:通过HTML5的getUserMedia实现拍照功能

  • 相关阅读:
    https原理以及golang基本实现
    关于Goroutine与Channel
    Golang中log与fmt区别
    liteide使用中的注意点
    Golang中的error类型
    关于linux中的目录配置标准以及文件基本信息
    Godep的基本使用
    Golang基本类型整理
    ssh使用技巧
    看完让你彻底搞懂Websocket原理
  • 原文地址:https://www.cnblogs.com/10manongit/p/12989684.html
Copyright © 2011-2022 走看看