使用电脑本地摄像头的权限

  • 关于如何调用本地摄像头的问题
    • 准备工具 (VS Code,Vue脚手架工具,Element UI)
    • vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用。
    • 实现效果
    • 1.摄像头效果
    • 直接上代码
    • 实现原理
    • 最后base64转文件,此处没用到
    • 没有写css样式,这里偷懒了,大家可以自己操作

关于如何调用本地摄像头的问题

不管是在vue项目里还是在其其它的项目当中,它都是window的对象

准备工具 (VS Code,Vue脚手架工具,Element UI)

vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用。

实现效果

1.摄像头效果

直接上代码

<template><div class="camera_outer"><video id="videoCamera" :width="videoWidth" :height="videoHeight" autoplay></video><canvas style="display:none;" id="canvasCamera" :width="videoWidth" :height="videoHeight"></canvas><div v-if="imgSrc" class="img_bg_camera"><p>效果预览</p><img :src="imgSrc" alt class="tx_img" /></div><div class="button"><el-button @click="getCompetence()">打开摄像头</el-button><el-button @click="stopNavigator()">关闭摄像头</el-button><el-button @click="setImage()">拍照</el-button></div></div>
</template><script>export default {name:"Xiu",data() {return {videoWidth: 250,videoHeight: 350,imgSrc: "",thisCancas: null,thisContext: null,thisVideo: null,openVideo:false};},mounted(){//this.getCompetence()//进入页面就调用摄像头},methods: {// 调用权限(打开摄像头功能)getCompetence() {var _this = this;_this.thisCancas = document.getElementById("canvasCamera");_this.thisContext = this.thisCancas.getContext("2d");_this.thisVideo = document.getElementById("videoCamera");_this.thisVideo.style.display = 'block';// 获取媒体属性,旧版本浏览器可能不支持mediaDevices,我们首先设置一个空对象if (navigator.mediaDevices === undefined) {navigator.mediaDevices = {};}// 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象// 使用getUserMedia,因为它会覆盖现有的属性。// 这里,如果缺少getUserMedia属性,就添加它。if (navigator.mediaDevices.getUserMedia === undefined) {navigator.mediaDevices.getUserMedia = function(constraints) {// 首先获取现存的getUserMedia(如果存在)var getUserMedia =navigator.webkitGetUserMedia ||navigator.mozGetUserMedia ||navigator.getUserMedia;// 有些浏览器不支持,会返回错误信息// 保持接口一致if (!getUserMedia) {//不存在则报错return Promise.reject(new Error("getUserMedia is not implemented in this browser"));}// 否则,使用Promise将调用包装到旧的navigator.getUserMediareturn new Promise(function(resolve, reject) {getUserMedia.call(navigator, constraints, resolve, reject);});};}var constraints = {audio: false,video: {width: this.videoWidth,height: this.videoHeight,transform: "scaleX(-1)"}};navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {// 旧的浏览器可能没有srcObjectif ("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 => {console.log(err);});},//  绘制图片(拍照功能)setImage() {var _this = this;// canvas画图_this.thisContext.drawImage(_this.thisVideo,0,0,_this.videoWidth,_this.videoHeight);// 获取图片base64链接var image = this.thisCancas.toDataURL("image/png");_this.imgSrc = image;//赋值并预览图片},// 关闭摄像头stopNavigator() {this.thisVideo.srcObject.getTracks()[0].stop();},// base64转文件,此处没用到dataURLtoFile(dataurl, filename) {var arr = dataurl.split(",");var mime = arr[0].match(/:(.*?);/)[1];var bstr = atob(arr[1]);var n = bstr.length;var u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, { type: mime });}}
};
</script><style  scoped></style>

实现原理

1)通过按钮的点击来调用函数,实现照片的显示和录制,
2) 打开摄像头调用getCompetence()函数
3) 获取媒体属性,旧版本浏览器可能不支持mediaDevices,我们首先设置一个空对象,使用getUserMedia,因为它会覆盖现有的属性。 这里,如果缺少getUserMedia属性,就添加它。
3.1) 我们需要一系列的判断,包括浏览器版本,或者srcObject,如果没有该属性那么就弃用它
4)拍照调用setImgs()函数,`

setImage() {var _this = this;// canvas画图_this.thisContext.drawImage(_this.thisVideo,0,0,_this.videoWidth,_this.videoHeight);// 获取图片base64链接var image = this.thisCancas.toDataURL("image/png");_this.imgSrc = image;//赋值并预览图片},
  1. 关闭摄像头调用函数stipNavigator()
stopNavigator() {this.thisVideo.srcObject.getTracks()[0].stop();},

最后base64转文件,此处没用到

没有写css样式,这里偷懒了,大家可以自己操作

Vue调用本地摄像头权限相关推荐

  1. vue调用本地摄像头实现拍照

    前言: vue调用本地摄像头实现拍照功能,由于调用摄像头有使用权限,只能在本地运行,线上需用https域名才可以使用. 实现效果: 1.摄像头效果: 2.拍照效果: 实现代码: <templat ...

  2. Http请求:Google调用本地摄像头权限开启

    项目场景: 最近在做一个考试培训系统!里面用到了监控摄像需要调用本地摄像头 解决方案: 打开谷歌浏览器,输入chrome://flags/回车: 在输入框输入unsafely-treat-insecu ...

  3. Vue 使用 navigator.mediaDevices.getUserMedia 调用本地摄像头实现录像以及拍照功能

    目录 前言 API `MediaDevices.getUserMedia()` 拍照功能实例 完整代码 实现效果 录像功能实例 完整代码 实现效果 总结 前言 最近在做开源实例: Vue.js 实战系 ...

  4. 前端调用手机摄像头权限进行扫码解析

    前端调用手机摄像头权限进行扫码解析(demo含Vue及原生) 前端调用手机摄像头权限进行扫码解析(demo含Vue及原生js写法) 引子 实践 此时已经可以成功调用摄像头,接下来集成进Vue工程中 最 ...

  5. ROS调用本地摄像头数据并在rviz里显示

    ROS调用本地摄像头数据并在rviz里显示: 1 通过usb_cam驱动包启动摄像头 1.1 创建并编译usb_cam驱动程序 1.2 启动usb_cam_node节点 1.3 在rviz中显示本地摄 ...

  6. 目标检测——使用yolov6调用本地摄像头进行实时检测

    yolov6源码自带了图片目标检测推理功能: 当我们想进行摄像头实时检测识别的时候会有点不方便,根据源码的图片目标检测推理功能,我们进行稍作调整即可进行调用本地摄像头进行目标检测推理功能. 首先在源码 ...

  7. js调用本地摄像头拍照截图,提交后台

    今天有个需求,需要在前端界面调用本地摄像头,然后拍照结束后可以截取预览,最后将结果提交到后台.查了网上很多的插件,发现适合的非常少,于是决定自己修改一个. 这里我修改了一个jquery插件,把摄像头拍 ...

  8. JS调用本地摄像头拍照(兼容各大浏览器及IE8+)

    最近做的项目遇到了个难题,使用video+canvas+getUserMedia()写的调用本地摄像头拍照不兼容IE. 原因:IE8及以下不支持HTML5标签:video和canvas:IE11及以下 ...

  9. 摄像头 虚拟服务器页面,虚拟云服务器能调用本地摄像头

    虚拟云服务器能调用本地摄像头 内容精选 换一换 虚拟IP(Virtual IP Address,简称VIP)是一个未分配给真实弹性云服务器网卡的IP地址.弹性云服务器除了拥有私有IP地址外,还可以拥有 ...

最新文章

  1. Robot Christmas!机器人玩转圣诞节!
  2. SSE图像算法优化系列十九:一种局部Gamma校正对比度增强算法及其SSE优化。
  3. java创建变量的过程_java 对象的创建过程
  4. MySQL数据库从GBK转换到UTF-8最简单解决方案(也适用于其它编码转换)
  5. 那位全心投入本地生活的首席科学家!
  6. Java Web的分页工具类
  7. 查看登陆系统用户的信息的三种方法详解
  8. DBGrid 应用系列
  9. BZOJ4542: [Hnoi2016]大数
  10. .php on line 0,windows启动apache提示PHP Startup: in Unknown on line 0
  11. Docker 开启镜像加速 (网易和阿里)
  12. ojdbc6手动装载
  13. Django博客项目使用容联云作为第三方发送短信验证码报错{‘172001‘: ‘网络错误‘}
  14. 大型网站架构技术方案集锦[转]
  15. Java虚拟机如何运行Java字节码?
  16. OpenCV从上到下的顺序查找轮廓
  17. MATLAB解析PFM格式图像
  18. p:nth-child(1) : 选择p是子元素中的第一个元素
  19. Spring Cloud(15)——配置中心
  20. 百度提供的号码归属地查询地址和返回示例

热门文章

  1. Ubuntu/Linux Server 服务器系统安装
  2. 如何实现产销平衡_实现SOP平衡的流程和策略
  3. XZ_iOS之内存泄露exc_bad_access
  4. Bean的作用域和生命周期-----Spring
  5. NOI Online 2020 Round3 滚粗记
  6. 理解杀毒软件的意义(完整---另加补充和总结)
  7. 【LorMe云讲堂】徐凌:利用全基因组促进可持续农业
  8. 连接数据库失败提示hba.conf不符合的处理方法
  9. [ARC084]E - Finite Encyclopedia of Integer Sequences 乱搞
  10. 项目一_GoldenEye