• html5拍照问题


    之前看到一个面试题是html5拍照。

    这边的用到的一个api是

    navigator.getUserMedia(constraints, successCallback, errorCallback);

    其中constraints是LocalMediaStream所支持的本地媒体类型,必须传入

    { video: true, audio: true }
    successCallback就是成功的回调函数,一般是把影像传到页面上
    function(localMediaStream) {
       var video = document.querySelector('video');
       video.src = window.URL.createObjectURL(localMediaStream);
       video.onloadedmetadata = function(e) {
          // Do something with the video here.
       };
    },

    errorCallback是错误回调,没什么好说的

    如果要拍照的话保存图片是要用到canvas的

    context.drawImage()方法将图片保存得到画布上。
    这边给出一个实例
    <!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> 
    
    
    
    最后有一个问题,这段代码必须在服务器上运行,不知为何,在jsbin上也是可以的。知道的人可以帮忙解答,谢谢
  • 相关阅读:
    ios swift 支持cocoaPods
    iOS 国际化
    ios storyboard全解析 (二)
    ios storyboard全解析 (一)
    UML类图的几个关系自我总结,(入门级)
    crypt 病毒
    js思维导向图
    关于索引的使用
    SQL Server 索引结构及其使用
    关于js数组的那些事
  • 原文地址:https://www.cnblogs.com/xiaqi/p/4507866.html
Copyright © 2020-2023  润新知