使用HTML5拍照

jopen 12年前發布 | 40K 次閱讀 HTML5 前端技術

首先,我們看看HTML代碼結構,當然,這部分的DOM內容應該是在用戶允許使用其攝像頭事件出發后,動態加載生成的。

注意: 我們采用的是 640X480的分辨率,如果采用JS動態生成,那么您是可以靈活控制分辨率的。

<!-- 
        聲明: 此div應該在允許使用webcam,網絡攝像頭之后動態生成
        寬高: 640 *480,當然,可以動態控制啦!
        -->
        <!--
    Ideally these elements aren't created until it's confirmed that the 
    client supports video/camera, but for the sake of illustrating the 
    elements involved, they are created with markup (not JavaScript)
        -->
        <video id="video" width="640" height="480" autoplay></video>
        <button id="snap">Snap Photo</button>
        <canvas id="canvas" width="640" height="480"></canvas>

JavaScript

只要上面的HTML元素創建完成,那么JavaScript部分將簡單的超乎你想象的簡單:

// 設置事件監聽,DOM內容加載完成,和jQuery的$.ready() 效果差不多。
    window.addEventListener("DOMContentLoaded", function() {
        // canvas 元素將用于抓拍
        var canvas = document.getElementById("canvas"),
            context = canvas.getContext("2d"),
            // video 元素,將用于接收并播放攝像頭 的數據流
            video = document.getElementById("video"),
            videoObj = { "video": true },
            // 一個出錯的回調函數,在控制臺打印出錯信息
            errBack = function(error) {
                if("object" === typeof window.console){
                    console.log("Video capture error: ", error.code); 
                }
            };

        // Put video listeners into place
        // 針對標準的瀏覽器
        if(navigator.getUserMedia) { // Standard
            navigator.getUserMedia(videoObj, function(stream) {
                video.src = stream;
                video.play();
            }, errBack);
        } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
            navigator.webkitGetUserMedia(videoObj, function(stream){
                video.src = window.webkitURL.createObjectURL(stream);
                video.play();
            }, errBack);
        }
        // 對拍照按鈕的事件監聽
        document.getElementById("snap").addEventListener("click", function() {
            // 畫到畫布上
            context.drawImage(video, 0, 0, 640, 480);
        });

    }, false);

 

最后,記得講您的網頁放到web服務器下面,然后通過http協議來訪問哦。

另外,需要瀏覽器版本較新,并且支持HTML5的相關新特性才可以。

譯者不算稱職啦,沒有按原文來翻譯。使用的瀏覽器是chrome 28。

最后,貼上完整的代碼,比較呆板。

<!DOCTYPE html>
<html>
 <head>
  <title> 瀏覽器webcamera </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="renfufei@qq.com">
  <meta name="Description" content="inveted by: http://davidwalsh.name/browser-camera">
  <script>
    // 設置事件監聽,DOM內容加載完成,和jQuery的$.ready() 效果差不多。
    window.addEventListener("DOMContentLoaded", function() {
        // canvas 元素將用于抓拍
        var canvas = document.getElementById("canvas"),
            context = canvas.getContext("2d"),
            // video 元素,將用于接收并播放攝像頭 的數據流
            video = document.getElementById("video"),
            videoObj = { "video": true },
            // 一個出錯的回調函數,在控制臺打印出錯信息
            errBack = function(error) {
                if("object" === typeof window.console){
                    console.log("Video capture error: ", error.code); 
                }
            };

        // Put video listeners into place
        // 針對標準的瀏覽器
        if(navigator.getUserMedia) { // Standard
            navigator.getUserMedia(videoObj, function(stream) {
                video.src = stream;
                video.play();
            }, errBack);
        } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
            navigator.webkitGetUserMedia(videoObj, function(stream){
                video.src = window.webkitURL.createObjectURL(stream);
                video.play();
            }, errBack);
        }
        // 對拍照按鈕的事件監聽
        document.getElementById("snap").addEventListener("click", function() {
            // 畫到畫布上
            context.drawImage(video, 0, 0, 640, 480);
        });

    }, false);
  </script>
 </head>

 <body>

    <div>
        <!-- 
        聲明: 此div應該在允許使用webcam,網絡攝像頭之后動態生成
        寬高: 640 *480,當然,可以動態控制啦!
        -->
        <!--
    Ideally these elements aren't created until it's confirmed that the 
    client supports video/camera, but for the sake of illustrating the 
    elements involved, they are created with markup (not JavaScript)
        -->
        <video id="video" width="640" height="480" autoplay></video>
        <button id="snap">Snap Photo</button>
        <canvas id="canvas" width="640" height="480"></canvas>
    </div>
 </body>
</html>

原文連接地址: Camera and Video Control with HTML5 

演示地址: HTML5拍照演示



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!