Vue2调用电脑摄像头权限,并拍照

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

背景:

电脑端需要调取用户摄像头进行拍照文章来源地址https://www.toymoban.com/news/detail-692656.html


1.封装工具函数------获取用户摄像头设备

/** @desc 获取计算机外设列表 储存摄像头数据 */
getDevices() {
  return new Promise((resolve, reject) => {
    if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
      window.alert("不支持 mediaDevices.enumerateDevices()");
    }
    navigator.mediaDevices
      .enumerateDevices()
      .then(devices => {
        let cameraList = [];
        devices.forEach((device, index) => {
          // 获取摄像头外设 videoinput
          if (device.kind && device.kind === "videoinput") {
            if (device.deviceId) {
              cameraList.push({
                id: device.deviceId,
                label: device.label
              });
            }
          }
        });
        resolve(cameraList);
      })
      .catch(err => {
        console.log(err.name + ": " + err.message);
        reject();
      });
  });
}

2.封装工具函数------获取用户摄像头设备

/** 
 * @desc 获取摄像头权限 getUserMedia 
 * deviceId	getDevices()函数获取的设备id
 * success  调用成功的回调函数
 * error	调用失败的回调函数
*/
getUserMedia(deviceId, success, error) {
  const constraints= {
      audio: false,
  	  video: {
         width: 300,
         height: 200,
         transform: "scaleX(-1)",
         deviceId: deviceId
      }
   };
  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);
  }
}

3.调用摄像头

/** @desc 摄像头使能封装 */
enableCamera(deviceId) {
  this.getUserMedia(
    deviceId,
    stream => {
      if ("srcObject" in this.thisVideo) {
        this.thisVideo.srcObject = stream;
      } else {
        // 避免在新的浏览器中使用它,新浏览器正在被弃用。没有开启摄像头权限或浏览器版本不兼容
        this.thisVideo.src = window.URL.createObjectURL(stream);
      }
      this.thisVideo.onloadedmetadata = e => {
        this.thisVideo.play();
      };
    },
    error => {
      console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
      alert("摄像头打开失败,请检查摄像头并点击浏览器地址栏右侧的摄像头标志进行开启设置");
    }
  );
},
// 拍照
handlePhotograph() {
  	this.thisContext.drawImage(this.thisVideo, 0, 0, 300, 200);
 	// 获取图片base64链接;
 	this.imgSrc = this.thisCanvas.toDataURL("image/png", 0.7);
},

完整代码:

<template>
  <div>
    <video id="videoCamera" autoplay></video>
    <img id="save_img" :src="imgSrc" alt="" />
    <canvas
      style="display: none"
      id="canvasCamera"
      :width="videoWidth"
      :height="videoHeight"
    ></canvas>
    <!--确认-->
    <button @click="handlePhotograph">拍照</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      videoWidth: 300,
      videoHeight: 200,
      cameraList: [{ id: "", label: "摄像头1" }],
      currentCamera: "",
      imgSrc: ""
    };
  },

  components: {},

  computed: {},

  mounted() {
    this.getDevices().then(res => {
      if (res.length) {
        this.cameraList = res;
      }
      this.currentCamera = this.cameraList[0].id;
      this.main();
    });
  },

  methods: {
    main() {
      this.thisCanvas = document.getElementById("canvasCamera");
      this.thisContext = this.thisCanvas.getContext("2d");
      this.thisVideo = document.getElementById("videoCamera");
      this.enableCamera(this.currentCamera);
    },
    getDevices() {
      return new Promise((resolve, reject) => {
        if (!navigator.mediaDevices || !navigator.mediaDevices.enumerateDevices) {
          window.alert("不支持 mediaDevices.enumerateDevices()");
        }
        navigator.mediaDevices
          .enumerateDevices()
          .then(devices => {
            let cameraList = [];
            devices.forEach((device, index) => {
              // 获取摄像头外设 videoinput
              if (device.kind && device.kind === "videoinput") {
                if (device.deviceId) {
                  cameraList.push({
                    id: device.deviceId,
                    label: device.label
                  });
                }
              }
            });
            resolve(cameraList);
          })
          .catch(err => {
            console.log(err.name + ": " + err.message);
            reject();
          });
      });
    },
    /**
     * @desc 获取摄像头权限 getUserMedia
     * deviceId	getDevices()函数获取的设备id
     * success  调用成功的回调函数
     * error	调用失败的回调函数
     */
    getUserMedia(deviceId, success, error) {
      const constraints = {
        audio: false,
        video: {
          width: this.videoWidth,
          height: this.videoHeight,
          transform: "scaleX(-1)",
          deviceId: deviceId
        }
      };
      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);
      }
    } /** @desc 摄像头使能封装 */,
    enableCamera(deviceId) {
      this.getUserMedia(
        deviceId,
        stream => {
          if ("srcObject" in this.thisVideo) {
            this.thisVideo.srcObject = stream;
          } else {
            // 避免在新的浏览器中使用它,新浏览器正在被弃用。没有开启摄像头权限或浏览器版本不兼容
            this.thisVideo.src = window.URL.createObjectURL(stream);
          }
          this.thisVideo.onloadedmetadata = e => {
            this.thisVideo.play();
          };
        },
        error => {
          console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
          alert("摄像头打开失败,请检查摄像头并点击浏览器地址栏右侧的摄像头标志进行开启设置");
        }
      );
    },
    // 拍照
    handlePhotograph() {
      this.thisContext.drawImage(this.thisVideo, 0, 0, 300, 200);
      // 获取图片base64链接;
      this.imgSrc = this.thisCanvas.toDataURL("image/png", 0.7);
    }
  }
};
</script>
<style lang="scss" scoped></style>

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

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

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

相关文章

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

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

    2024年02月13日
    浏览(14)
  • Unity | 如何调用摄像头拍照

    Unity | 如何调用摄像头拍照

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

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

    python调用摄像头实现拍照功能

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

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

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

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

    Pyqt5打开电脑摄像头进行拍照

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

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

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

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

    uniapp开发h5或小程序调用摄像头拍照,录屏

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

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

    opencv在linux上调用usb摄像头进行拍照

    一般video1就是usb摄像头

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

    使用PYQT5打开电脑摄像头并进行拍照

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

    2023年04月21日
    浏览(7)
  • H5 页面通过navigator.mediaDevices.getUserMedia调用手机摄像头拍照上传

    H5 页面通过navigator.mediaDevices.getUserMedia调用手机摄像头拍照上传

    需求: 某知名化妆品牌,要做个在线问卷调查。需要试用着自拍上传 注:使用navigator.mediaDevices.getUserMedia 需要使用https请求协议否者视为不安全,无法访问,开发阶段需要将启动改为https 在package.json中 前端开发环境启动项目将http协议改为https协议    授权,默认前置,切换

    2024年02月11日
    浏览(16)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包