浏览器视频截图

1.html内容:

<button onclick="btn()">打开设备</button>

 <button onclick="imageBtn()">截图</button>

 <video src=""></video>

 <canvas></canvas>

 <img src="" alt="">

2.js内容:

首先需要获取设备调取摄像头;

由于摄像分辨率很大,往往通过canvas直接截取的话会出现截取不全,所以需要隔离媒体流获取浏览器上可视部分,通过调用来做到这一点MediaStream.getVideoTracks(),这将返回一个MediaStreamTrack对象数组;

从媒体流中获取拍摄到的静止图片的信息,并且让canvas的宽度和高度等于媒体流的可视这部分;

进行截图,使用canvas绘图。

<script>

  var video = document.querySelector('video');

  var canvas = document.querySelector('canvas');

  var img = document.querySelector('img');

  //打开设备

  function btn(){

    var constraints = {

      audio:false,

      video:{

        width:750,

        height:1334

      }

    };

    navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream){      // 获取设备

    video.srcObject = mediaStream;

    video.onloadedmetadata = function(e) {

      video.play();

    };

    var track = mediaStream.getVideoTracks()[0],   //隔离媒体流的可视部分

    imageCapture = new ImageCapture(track);        //构造函数

    // 从流中获取拍摄到的静止图片的信息

    imageCapture.getPhotoSettings().then(res=>{

      // return console.log(e);

      console.log('1',res);

      canvas.width = res.imageWidth;   //让canvas的宽和高等于隔离的媒体流的可视这部分

      canvas.height = res.imageHeight;

      console.log('2',canvas.width,canvas.height)

    });

    })

}

  //截图

  function imageBtn(){

    console.log('3',canvas.width,canvas.height)

    var ctx = canvas.getContext('2d');    //二维绘图,该对象导出一个二维绘图 API

    ctx.drawImage(video,0,0);                //drawImage()方法,可以引入图像、画布、视频,并对其进行缩放或裁剪

    var dataUrl = canvas.toDataURL('image/jpeg'); //返回一个包含图片展示的 dataURI 

    img.src = dataUrl;

    console.log('4',dataUrl)

  }

</script>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容