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.getUserMediareturn 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) {// 旧的浏览器可能没有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 => {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调用电脑端摄像头实时拍照相关推荐

  1. VUE调用pc端摄像头

    VUE项目调用pc端摄像头功能 (摄像头只可以用localhost启用项目访问,或者修改浏览器配置,底部有方法) 代码如下: <template> <!-- 原生摄像头-->& ...

  2. h5调用移动端摄像头实现拍照获取图片

    需求简述:打开移动端相机进行拍照,并且获取图片 效果图 相关代码 <!DOCTYPE html> <html><head><meta charset=&quo ...

  3. vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹

    vue 调用pc端本地摄像头.麦克风实现拍照.录视频.录音 并上传 自己写blog只是为了下次方便使用 过程确实很烦 ,自己摸索加各大网站cv查看 可以直接使用 1.调用摄像头拍照 录屏 首先是npm ...

  4. 调用海康摄像头实时识别数字牌数字

    项目场景: 调用海康摄像头实时识别数字牌数字 前言 项目所需,调用网络摄像头来完成对一个数字牌的识别,用模板匹配的方法分离出数字 用VS2015+OPENCV3.4.3完成 一.调用摄像头 首先在VS ...

  5. pc端调起电脑的摄像头进行拍照功能

    我的需求是在电脑端调起电脑上面的摄像头,有可能是电脑自带的摄像头也可能是插入的USB摄像头 下面这个是如果用户有两个摄像头的话,会将这两个摄像头都列出来,用户可以自己选择使用哪个摄像头. 下面是htm ...

  6. C# 利用Aforge调用本机摄像头完成拍照,录像

    用C#做了一个简单的摄像头录像项目,记录一下. 实现功能 打开.关闭摄像头并显示相应画面 实现拍照功能 实现录像功能 实现保存图片.录像的功能 运行界面效果 winForm控件 首先安装NuGet程序 ...

  7. js如何调用电脑的摄像头

    闲来无事,用js写了一个调用摄像头的demo,并用canvas显示保存.这个功能很实用,比如上传用户的头像,即时拍照及时上传. Html: <video width="200px&qu ...

  8. Python-OpenCV学习--电脑外接摄像头实时采集FAST角点并显示

    一.一般的Python OpenCV代码是对现有的图片提取fast角点 参考代码很多:https://blog.csdn.net/update7/article/details/105927539 二 ...

  9. 前端项目用hbuilder打包成APP后,调用api开启摄像头进行拍照, 5+app框架

    这几个方法function是js通用的, 非vue项目也可以使用! 记得收藏哦! 重点是从 按钮"开启相机" 开始,点击触发photo方法 可以直接看method中的photo方法 ...

最新文章

  1. 寒武纪创始人兼CEO陈天石博士的公开信
  2. iOS实录15:浅谈iOS Crash
  3. 如何使用AngularJS绑定到复选框值列表?
  4. JS(JavaScript)的初了解3(更新中···)
  5. 154. 寻找旋转排序数组中的最小值 II(有手就行)
  6. Ubuntu 10.10升级显卡驱动后开机动画低分辨率问题
  7. linux中wait()系统调用的例子,linux进程管理之wait系统调用
  8. 2月26日 光流,跟踪算法的尝试
  9. mysql索引表交换分区_MySQL交换分区的实例详解
  10. 基于PHP使用thinkphp开发的教学管理系统
  11. 一文读懂nginx gzip_static
  12. 流浪四十年,中国科幻撒点野
  13. R语言使用马尔可夫链Markov Chain, MC来模拟抵押违约
  14. 中小园区网配置案例 超详细
  15. 戴口罩人脸识别、高精度人脸识别解决方案
  16. average and standard deviation-平均数和标准差
  17. Tensorflow GPU并行运算
  18. 记可视化项目代码设计的心路历程以及理解
  19. 解决VirtualBox不能为虚拟电脑打开一个新任务
  20. Serial Programming HOWTO——Linux 串口编程HOWTO

热门文章

  1. 电容笔有必要买吗?双十一性价比高的电容笔推荐
  2. 《三国演义》与“项目管理”——从诸葛亮舌战群儒看商务谈判
  3. 【算法上车③】华为摄像头rpm签名校验并安装调试
  4. Opncv 实现拍照、颜色识别和阈值选取
  5. 当供应链金融遇上IoT 华为将和渣打银行擦出怎样的火花?
  6. 红外遥控器添加遥控支持方法
  7. 健身健美减脂、脱水、充碳记录
  8. gb2312的字符串(包括中午)转16进制字符串以及反转义原始字符
  9. 使用pip/pip3安装第三方模块,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
  10. 西瓜创客联创刘鹏:在AI的曙光中拥抱教育的未来