How can I capture an image via the user's webcam using getUserMedia?

后端 未结 3 2002
北荒
北荒 2020-12-05 11:45

I want to make a program on the web which will capture an image via the user\'s webcam.

I am using the getUserMedia Web API. Here is my code, but it do

相关标签:
3条回答
  • 2020-12-05 11:58

    There have been updates to the getUserMedia api that now expose takePhoto and grabFrame. The grabFramemethod is less exciting because it does what we have been doing all along and just returning the next video frame from the stream but takePhoto interupts the stream to use the cameras "highest available photographic camera resolution" to capture a compressed image blob. More details here: google devs

    var stream, imageCapture; 
    
    function getMediaStream()
    { 
        window.navigator.mediaDevices.getUserMedia({video: true})
        .then(function(mediaStream)
        { 
            stream = mediaStream; 
            let mediaStreamTrack = mediaStream.getVideoTracks()[0];
            imageCapture = new ImageCapture(mediaStreamTrack);
            console.log(imageCapture);
        })
        .catch(error);
    }
    
    function error(error)
    { 
        console.error('error:', error); 
    }
    
    function takePhoto(img)
    { 
        const img = img || document.querySelector('img');
    
        imageCapture.takePhoto()
        .then(blob => {
            let url = window.URL.createObjectURL(blob);
            img.src = url;
    
            window.URL.revokeObjectURL(url); 
        })
        .catch(error);
    }; 
    
    /* just call */ 
    getMediaStream(); 
    
    /* and when you want to capture an image */ 
    takePhoto();
    
    0 讨论(0)
  • 2020-12-05 12:08

    You can use this working sample

     <!DOCTYPE html>
    <html>
      <head>
      </head>
      <body onload="init();">
        <h1>Take a snapshot of the current video stream</h1>
       Click on the Start WebCam button.
         <p>
        <button onclick="startWebcam();">Start WebCam</button>
        <button onclick="stopWebcam();">Stop WebCam</button> 
           <button onclick="snapshot();">Take Snapshot</button> 
        </p>
        <video onclick="snapshot(this);" width=400 height=400 id="video" controls autoplay></video>
      <p>
    
            Screenshots : <p>
          <canvas  id="myCanvas" width="400" height="350"></canvas>  
      </body>
      <script>
          //--------------------
          // GET USER MEDIA CODE
          //--------------------
              navigator.getUserMedia = ( navigator.getUserMedia ||
                                 navigator.webkitGetUserMedia ||
                                 navigator.mozGetUserMedia ||
                                 navigator.msGetUserMedia);
    
          var video;
          var webcamStream;
    
          function startWebcam() {
            if (navigator.getUserMedia) {
               navigator.getUserMedia (
    
                  // constraints
                  {
                     video: true,
                     audio: false
                  },
    
                  // successCallback
                  function(localMediaStream) {
                      video = document.querySelector('video');
                     video.src = window.URL.createObjectURL(localMediaStream);
                     webcamStream = localMediaStream;
                  },
    
                  // errorCallback
                  function(err) {
                     console.log("The following error occured: " + err);
                  }
               );
            } else {
               console.log("getUserMedia not supported");
            }  
          }
    
          function stopWebcam() {
              webcamStream.stop();
          }
          //---------------------
          // TAKE A SNAPSHOT CODE
          //---------------------
          var canvas, ctx;
    
          function init() {
            // Get the canvas and obtain a context for
            // drawing in it
            canvas = document.getElementById("myCanvas");
            ctx = canvas.getContext('2d');
          }
    
          function snapshot() {
             // Draws current image from the video element into the canvas
            ctx.drawImage(video, 0,0, canvas.width, canvas.height);
          }
    
      </script>
    </html>
    
    0 讨论(0)
  • 2020-12-05 12:12

    getUserMedia is not supported by IE11, take a look on this link: https://caniuse.com/#search=getuserMedia

    So if you are still wanted to use the core property of getUserMedia then you need to use polyfill. Take a look on this polyfilllink: https://github.com/addyosmani/getUserMedia.js

    0 讨论(0)
提交回复
热议问题