最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 如何在PC端使用WebRTC 拍摄静态照片

    正文概述 掘金(陆小鹿)   2021-06-28   419
    一、业务场景

    我们需要在PC端打开摄像头,捕获摄像头画面,并实现截图保存该画面。

    二、代码实现

    1.界面有两个主要的操作部分:流和捕获面板和演示面板,一个元素,它将接收来自 WebRTC 的流,一个用来初始化打开摄像头,以及一个用户单击以捕获视频帧。

    <div class='content'>
          <video v-show="!init" id="photograph" width="300" height="300"></video>
          <div>
            <button v-if="init" @click="initPhoto()">初始化摄像头</el-button>
            <button v-else  @click="submit()">开始采集</el-button>
          </div>
        </div>
      </div>
    

    2.接下来,我们有一个元素,捕获的帧存储在其中,可能以某种方式进行操作,然后转换为输出图像文件。该画布通过使用 设置画布样式来保持隐藏,以避免使屏幕混乱——-用户不需要看到这个中间阶段,所以v-show==false, 我们还有一个如何在PC端使用WebRTC 拍摄静态照片元素,我们将在其中绘制图像——这是向用户显示的最终显示。

    <canvas ref="photographImg" v-show="false" id="photographImg" width="300" height="300"</canvas>
    <div class="output">
      <img id="photo" >
    </div>
    

    3.检测摄像头,进行初始化,检测当前用户终端是否有摄像头,并打开,传入成功回调函数sucess以及异常捕获error。

    initPhoto() {
          let _this = this;
          _this.loading = true;
    
          function getUserMedia(constraints, success, error) {
              if (navigator.mediaDevices.getUserMedia) {
                  //最新的标准API
                  navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
              } else if (navigator.webkitGetUserMedia) {
                  //webkit核心浏览器
                  navigator.webkitGetUserMedia(constraints, success, error)
              } else if (navigator.mozGetUserMedia) {
                  //firfox浏览器
                  navigator.mozGetUserMedia(constraints, success, error);
              } else if (navigator.getUserMedia) {
                  //旧版API
                  navigator.getUserMedia(constraints, success, error);
              }
          }
    
          let video = document.getElementById('photograph');
          function success(stream) {
              setTimeout(res => {
                  _this.init = false;
                  _this.loading = false
              }, 2000);
              //兼容webkit核心浏览器
              let CompatibleURL = window.URL || window.webkitURL;
              video.srcObject = stream;
              video.play();
          }
    
    
          function error(error) {
              _this.loading = false;
              _this.$message({
                  showClose: true,
                  message: `访问用户媒体设备失败${error.name}, ${error.message}`,
                  type: 'error'
              });
          }
    
          if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
              //调用用户媒体设备, 访问摄像头
              getUserMedia({video: {width: 300, height: 300}}, success, error);
          } else {
              _this.$message({
                  showClose: true,
                  message: '不支持访问用户媒体',
                  type: 'error'
              });
          }
      },
    

    4.点击按钮采集图片submit

    submit() {
        let canvas = document.getElementById('photographImg');
        let context = canvas.getContext('2d');
        let video = document.getElementById('photograph');
        context.drawImage(video, 0, 0, 300, 300);
        this.takepicture();
    },
    function takepicture() {
        var context = canvas.getContext('2d');
        if (width && height) {
          canvas.width = width;
          canvas.height = height;
          context.drawImage(video, 0, 0, width, height);
    
          var data = canvas.toDataURL('image/png');
          photo.setAttribute('src', data);
        } 
      }
    [更多官方资料请参考](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Taking_still_photos)
    


    起源地下载网 » 如何在PC端使用WebRTC 拍摄静态照片

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元