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.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调用电脑端摄像头实时拍照相关推荐
- VUE调用pc端摄像头
VUE项目调用pc端摄像头功能 (摄像头只可以用localhost启用项目访问,或者修改浏览器配置,底部有方法) 代码如下: <template> <!-- 原生摄像头-->& ...
- h5调用移动端摄像头实现拍照获取图片
需求简述:打开移动端相机进行拍照,并且获取图片 效果图 相关代码 <!DOCTYPE html> <html><head><meta charset=&quo ...
- vue 调用pc端本地摄像头、麦克风实现拍照、录视频、录音 并上传到服务器指定树文件夹
vue 调用pc端本地摄像头.麦克风实现拍照.录视频.录音 并上传 自己写blog只是为了下次方便使用 过程确实很烦 ,自己摸索加各大网站cv查看 可以直接使用 1.调用摄像头拍照 录屏 首先是npm ...
- 调用海康摄像头实时识别数字牌数字
项目场景: 调用海康摄像头实时识别数字牌数字 前言 项目所需,调用网络摄像头来完成对一个数字牌的识别,用模板匹配的方法分离出数字 用VS2015+OPENCV3.4.3完成 一.调用摄像头 首先在VS ...
- pc端调起电脑的摄像头进行拍照功能
我的需求是在电脑端调起电脑上面的摄像头,有可能是电脑自带的摄像头也可能是插入的USB摄像头 下面这个是如果用户有两个摄像头的话,会将这两个摄像头都列出来,用户可以自己选择使用哪个摄像头. 下面是htm ...
- C# 利用Aforge调用本机摄像头完成拍照,录像
用C#做了一个简单的摄像头录像项目,记录一下. 实现功能 打开.关闭摄像头并显示相应画面 实现拍照功能 实现录像功能 实现保存图片.录像的功能 运行界面效果 winForm控件 首先安装NuGet程序 ...
- js如何调用电脑的摄像头
闲来无事,用js写了一个调用摄像头的demo,并用canvas显示保存.这个功能很实用,比如上传用户的头像,即时拍照及时上传. Html: <video width="200px&qu ...
- Python-OpenCV学习--电脑外接摄像头实时采集FAST角点并显示
一.一般的Python OpenCV代码是对现有的图片提取fast角点 参考代码很多:https://blog.csdn.net/update7/article/details/105927539 二 ...
- 前端项目用hbuilder打包成APP后,调用api开启摄像头进行拍照, 5+app框架
这几个方法function是js通用的, 非vue项目也可以使用! 记得收藏哦! 重点是从 按钮"开启相机" 开始,点击触发photo方法 可以直接看method中的photo方法 ...
最新文章
- 寒武纪创始人兼CEO陈天石博士的公开信
- iOS实录15:浅谈iOS Crash
- 如何使用AngularJS绑定到复选框值列表?
- JS(JavaScript)的初了解3(更新中···)
- 154. 寻找旋转排序数组中的最小值 II(有手就行)
- Ubuntu 10.10升级显卡驱动后开机动画低分辨率问题
- linux中wait()系统调用的例子,linux进程管理之wait系统调用
- 2月26日 光流,跟踪算法的尝试
- mysql索引表交换分区_MySQL交换分区的实例详解
- 基于PHP使用thinkphp开发的教学管理系统
- 一文读懂nginx gzip_static
- 流浪四十年,中国科幻撒点野
- R语言使用马尔可夫链Markov Chain, MC来模拟抵押违约
- 中小园区网配置案例 超详细
- 戴口罩人脸识别、高精度人脸识别解决方案
- average and standard deviation-平均数和标准差
- Tensorflow GPU并行运算
- 记可视化项目代码设计的心路历程以及理解
- 解决VirtualBox不能为虚拟电脑打开一个新任务
- Serial Programming HOWTO——Linux 串口编程HOWTO
热门文章
- 电容笔有必要买吗?双十一性价比高的电容笔推荐
- 《三国演义》与“项目管理”——从诸葛亮舌战群儒看商务谈判
- 【算法上车③】华为摄像头rpm签名校验并安装调试
- Opncv 实现拍照、颜色识别和阈值选取
- 当供应链金融遇上IoT 华为将和渣打银行擦出怎样的火花?
- 红外遥控器添加遥控支持方法
- 健身健美减脂、脱水、充碳记录
- gb2312的字符串(包括中午)转16进制字符串以及反转义原始字符
- 使用pip/pip3安装第三方模块,出现Cannot unpack file xxx的问题的解决以及pip安装速度慢或出现readtime out问题的解决。
- 西瓜创客联创刘鹏:在AI的曙光中拥抱教育的未来