vue调用电脑端摄像头实时拍照

这篇具有很好参考价值的文章主要介绍了vue调用电脑端摄像头实时拍照。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求描述

点击照相机拍照,弹出照相机拍照弹窗,点击拍照按钮,截取录像的帧,点击保存,提交数据给后台。

功能实现

1.html模块

//点击打开照相机拍照弹窗
<el-button @click="handleOpen">照相机拍照</el-button>

//照相机拍照弹窗
    <div class="public-mask mask-grey-bg" v-show="cameraOpen">
      <div class="mask-main camera-main">
        <div class="mask-title">
          <img src="../assets/images/icon_camera.png" class="title-icon"/>
          <span>照相机拍照</span>
          <img src="../assets/images/icon_close.png" class="title-close" @click="closeCameraMask"/>
        </div>
        <div class="camera-box">
          <div class="camera-left">
            <!-- 这里就是摄像头显示的画面 -->
            <video id="videoCamera" width="100%" height="100%"></video>
          </div>
          <div class="camera-right">
        
            <div class="camera-img-box">
              <div class="small-img">
               <!-- 这里是点击拍照显示的图片画面 -->
                <img v-if="imgSrc" :src="imgSrc" style="width: 200px;height: 150px;" />
                <canvas id="canvasCamera" class="canvas" :width='videoWidth' :height='videoHeight' style="display: none;"></canvas>
              </div>
              <div>
              <!-- 点击拍照和保存按钮 -->
                <el-button type="primary" class="save-camera-btn" icon="el-icon-camera" @click="drawImage" style="margin-top: 10px;">拍照</el-button>
                <el-button type="primary" class="save-camera-btn" icon="el-icon-check" @click="uploadPicture">保存</el-button>
              </div>
            </div>
            
          </div>
          
        </div>
      </div>
    </div>

2.css模块
就是一个弹窗,这里就不进行展示了。

3.js模块

export default {
  name: "Index",
  data() {
  	return {
  	  /** 照相机弹窗模块-start */
      cameraOpen: false,
      imgSrc: undefined,
      os: false,//控制摄像头开关
      thisVideo: null,
      thisContext: null,
      thisCancas: null,
      videoWidth: 800,
      videoHeight: 600,
      /** 照相机弹窗模块-end */
  	}
  },
  methods: {
  /** 调用摄像头拍照-start*/
  	// 打开照相机弹窗
  	handleOpen() {
  	  this.cameraOpen = true;
      this.getCompetence();
  	},
    // 调用摄像头权限
    getCompetence() {
      //必须在model中render后才可获取到dom节点,直接获取无法获取到model中的dom节点
      this.$nextTick(() => {
        const _this = this;
        this.os = false;//切换成关闭摄像头
        this.thisCancas = document.getElementById('canvasCamera');//这里是需要截取的canvas的Id名称
        this.thisContext = this.thisCancas.getContext('2d');
        this.thisVideo = document.getElementById('videoCamera');
        // 旧版本浏览器可能根本不支持mediaDevices,我们首先设置一个空对象
        if (navigator.mediaDevices === undefined) {
          navigator.menavigatordiaDevices = {}
        }
        // 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象
        // 使用getUserMedia,因为它会覆盖现有的属性。
        // 这里,如果缺少getUserMedia属性,就添加它。
        if (navigator.mediaDevices.getUserMedia === undefined) {
          navigator.mediaDevices.getUserMedia = function (constraints) {
            // 首先获取现存的getUserMedia(如果存在)
            let getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.getUserMedia;
            // 有些浏览器不支持,会返回错误信息
            // 保持接口一致
            if (!getUserMedia) {
              return Promise.reject(new Error('getUserMedia is not implemented in this browser'))
            }
            // 否则,使用Promise将调用包装到旧的navigator.getUserMedia
            return new Promise(function (resolve, reject) {
              getUserMedia.call(navigator, constraints, resolve, reject)
            })
          }
        }
        const constraints = {
          audio: false,
          video: {width: _this.videoWidth, height: _this.videoHeight, transform: 'scaleX(-1)'}
        };
        navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
          // 旧的浏览器可能没有srcObject
          if ('srcObject' in _this.thisVideo) {
            _this.thisVideo.srcObject = stream
          } else {
            // 避免在新的浏览器中使用它,因为它正在被弃用。
            _this.thisVideo.src = window.URL.createObjectURL(stream)
          }
          _this.thisVideo.onloadedmetadata = function (e) {
            _this.thisVideo.play()
          }
        }).catch(err => {
          this.$notify({
            title: '警告',
            message: '没有开启摄像头权限或浏览器版本不兼容.',
            type: 'warning'
          });
        });
      });
    },
    //绘制图片
    drawImage() {
      // 点击,canvas画图
      this.thisContext.drawImage(this.thisVideo, 0, 0, this.videoWidth, this.videoHeight);
      // 获取图片base64链接,展示到界面中的也是这个url地址
      this.imgSrc = this.thisCancas.toDataURL('image/png');
    },
    // 上传照相机图片
    uploadPicture() {
      // 这里就调用上传图片接口即可
      ...
    },
    //清空画布
    clearCanvas(id) {
      let c = document.getElementById(id);
      let cxt = c.getContext("2d");
      cxt.clearRect(0, 0, c.width, c.height);
    },
    //重置画布
    resetCanvas() {
      this.imgSrc = "";
      this.clearCanvas('canvasCamera');
    },
    //关闭摄像头
    stopNavigator() {
      if (this.thisVideo && this.thisVideo !== null) {
        this.thisVideo.srcObject.getTracks()[0].stop();
        this.os = true;//切换成打开摄像头
      }
    },
    // 关闭照相机弹窗
    closeCameraMask() {
      this.cameraOpen = false; // 关闭照相机弹窗
      this.resetCanvas(); // 重置画布
      this.stopNavigator(); // 关闭摄像头
      //this.getDetailList(); // 重新获取一下List,此方法不再书写
    },
    /** 调用摄像头拍照-end*/
  },
}

效果展示

vue调用摄像头拍照,vue.js,javascript,前端文章来源地址https://www.toymoban.com/news/detail-528511.html

到了这里,关于vue调用电脑端摄像头实时拍照的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PC端调用摄像头拍照(vue)以及解决getUserMedia is not implemented in this browser

    下面这段代码是在html文件中执行调用摄像头,然后进行拍照的功能,一切都是按照里面的步骤去走的,功能也确实可以实现,后面的代码就是 vue 实现这个功能的逻辑代码(如果你还直接使用,你就会发现一个坑爹的问题,请继续看下去) html文件内容 vue项目中使用(组件),

    2024年02月13日
    浏览(45)
  • Java获取实时摄像头进行拍照(附源码)

    Java是一种通用编程语言,可以用来开发各种类型的应用程序,包括涉及图像处理和相机操作的应用程序。         要在Java中获取实时摄像头进行拍照,通常会借助一些 第三方库或API ,例如 OpenCV(Open Source Computer Vision Library) 或 Java Media Framework(JMF) 等。这些库和API提

    2024年01月25日
    浏览(45)
  • Unity | 如何调用摄像头拍照

    我只用了PC端,其他平台我没试过哈~ 1.常见的输入内容 常见的输入内容:声音、图片 (影像就是一连串图片不停的放,所以摄像头发给电脑的实际上是很多很多图片) 常见的输入设备:输入声音对应的设备一般是麦克风,图片对应的设备一般设摄像头。 2.unity获取设备访问

    2023年04月09日
    浏览(46)
  • python调用摄像头实现拍照功能

    目录 1.介绍 2.系统依赖 (1)OpenCV-Python库 (2)Tkinter库 (3)Pillow库 (4)Time库 3.系统代码 4.效果展示 5.注意事项         这是一个有趣的项目,通过Python程序调用系统的摄像头,实现了拍照的功能.         我的主页还有一些文章介绍了其他有趣的项目,可以动手尝试一下: 代码写不完了

    2024年02月04日
    浏览(55)
  • Python进阶,使用 opencv 调用摄像头进行拍照

             opencv 支持 Python 版本的模块叫作 opencv-p hon ,可直接使用 pip install opencv-python 令进行安装,但常常会因为网络等问题导致失败。推荐使用离线模式来安装 opencv 模块。 下载完安装包后,使用如下命令进行安装: D: pip install opencv

    2024年02月11日
    浏览(69)
  • Pyqt5打开电脑摄像头进行拍照

    目录 1、设计UI界面 2、设计逻辑代码,建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为:(文件名为  Camera.py ) 2、设计逻辑代码,建立连接显示窗口 逻辑代码如下:(文件名为 Camera_main.py ) 3、结果 参考:暂未成功人士

    2024年02月12日
    浏览(50)
  • Unity3D:调用安卓摄像头拍照

    操作步骤:创建脚步并挂载到Main Camera上 仍未解决的问题:导入到安卓平台测试时,拍照按钮不能随着屏幕旋转而变换位置; 拍照时会把拍照按钮也截进去。

    2024年02月06日
    浏览(51)
  • uniapp开发h5或小程序调用摄像头拍照,录屏

    uniapp开发h5或小程序调用摄像头拍照,录屏 如图 注意,小程序上线使用需要配置upload域名。

    2024年02月12日
    浏览(66)
  • opencv在linux上调用usb摄像头进行拍照

    一般video1就是usb摄像头

    2024年02月06日
    浏览(50)
  • 使用PYQT5打开电脑摄像头并进行拍照

    目录 1 UI界面的布局 2 UI界面布局对应的代码 3 打开电脑摄像头等功能的完整代码 4 一些代码函数和优化界面代码 5 最终效果 下图是简单设计的一个UI控制的输出可视化界面。       其中, 摄像头图片显示 使用的是左边功能的 label 类、 打开摄像头拍照关闭摄像头导出图片

    2023年04月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包