vue中调用本地摄像头拍照生成base64的图像

<template><div class="main"><el-card><div slot="header"><div><span>{{ $t('拍照') }}</span><i @click="drawImage(true)" class="el-icon-refresh"></i></div></div><div><div class="camera_outer" ref="imgbg"><div><videostyle="display: none"id="videoCamera":width="videoWidth":height="videoHeight"mutedautoplay></video><canvasstyle="display: none"id="canvasCamera":width="videoWidth":height="videoHeight"></canvas></div><div v-if="imgSrc" class="img_bg_camera"><img :src="imgSrc" alt class="tx_img" /></div></div></div></el-card></div>
</template><script>
export default {components: {},data() {return {/** 照相机弹窗模块-start */imgSrc: undefined,thisVideo: null,thisContext: null,thisCancas: null,videoWidth: 250,videoHeight: 130,takePhotos: true, // 控制警告弹窗/** 照相机弹窗模块-end */};},mounted() {this.init();},beforeDestroy() {this.stopNavigator();},methods: {init() {this.getCompetence();},// 调用摄像头权限getCompetence() {//必须在model中render后才可获取到dom节点,直接获取无法获取到model中的dom节点this.$nextTick(() => {const _this = this;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 () {_this.thisVideo.play();};_this.takePhotos = true;}).catch(err => {_this.takePhotos = false;console.log(err);});});},//绘制图片drawImage() {if (!this.takePhotos) {this.imgSrc = '';this.$message.error($t('未检测到摄像设备,或未打开权限'));return;}// 点击,canvas画图this.thisContext.drawImage(this.thisVideo,0,0,this.videoWidth,this.videoHeight);// 获取图片base64链接,展示到界面中的也是这个url地址this.imgSrc = this.thisCancas.toDataURL('image/png');},//清除stopNavigator() {if (this.thisVideo && this.thisVideo !== null) {this.thisVideo = null;this.imgSrc = '';}},},computed: {},
};
</script>
<style lang="scss" scoped>
.camera_outer {width: 100%;height: 130px;.img_bg_camera {height: 130px;img {width: 100%;height: 100%;}}
}
</style>

vue调用摄像头拍照相关推荐

  1. vue中调用摄像头拍照,并把拍照的base64格式转换为file传递后台

    需求: 在vue项目中使用摄像头拍摄照片传递,进行上传,如果上传成功可以获取到url链接,进行下一步的操作 内容梳理 1.首先进入页面打开摄像头 2.点击手动拍照进行拍摄照片,实时显示拍照效果 3.拿 ...

  2. vue实现PC端调用摄像头拍照人脸录入、移动端调用手机前置摄像头人脸录入、及图片旋转矫正、压缩上传base64格式/文件格式

    PC端调用摄像头拍照上传base64格式到后台,这个没什么花里胡哨的骚操作,直接看代码 (canvas + video) <template><div><!--开启摄像头 ...

  3. Ionic系列——调用摄像头拍照和选择图库照片功能的实现

    2019独角兽企业重金招聘Python工程师标准>>> 1.需求描述 最近要做一个功能就是调用摄像头拍照,然后上传照片的功能,或者直接打开图库选择照片然后上传. 2.准备 ①.添加插 ...

  4. android: 调用摄像头拍照

    很多应用程序都可能会使用到调用摄像头拍照的功能,比如说程序里需要上传一张图片 作为用户的头像,这时打开摄像头拍张照是最简单快捷的.下面就让我们通过一个例子来学 习一下,如何才能在应用程序里调用手机的摄 ...

  5. android 7调用摄像头,Android调用摄像头拍照(兼容7.0)

    [实例简介] Android调用摄像头拍照(兼容7.0)Demo,原博客文章https://blog.csdn.net/u010356768/article/details/70808162 [实例截 ...

  6. Python:opencv库实现调用摄像头拍照并保存到本地

    导入 opencv-python库,复制代码即可运行 import cv2def picture_shoot(image_name='img.png', image_path=r'E:/') -> ...

  7. HTML5+JavaScript调用摄像头拍照或者摄像

    调用摄像头拍照或者摄像有多种方法,之前介绍过两种: HTML5 <input type="file">标签直接调用:https://blog.csdn.net/qq_2 ...

  8. jquery.webcam.js实现调用摄像头拍照兼容各个浏览器

    jquery.webcam.js实现调用摄像头拍照兼容各个浏览器 1.demo 可直接复制使用,需要在环境里运行. 2.所需 js 文件和 swf 控件可在官方博客下载,地址http://www.xa ...

  9. unity调用摄像头拍照

    我的unity调用摄像头拍照 因为做的是pc端的,所以不知道手机上效果是怎样的,据说代码是完全相同的. 废话不说,上代码, 打开摄像头代码: /// <summary>/// Opens ...

最新文章

  1. 科大星云诗社动态20210424
  2. AI自动标注神器!支持多通道、大尺幅数据
  3. 期末考试前的预习,科目:化工设备与反应器(3)
  4. 超大非负整数的减法~
  5. GTK+开发环境搭建(Centos+Netbeans)
  6. 客户端通过网口启动可过去的ip_西安交通大学16年3月课程考试《网络组网技术综合训练》作业考核试题...
  7. bzoj3551 [ONTAK2010]Peaks加强版 kruskal重构树
  8. Spark源码分析之Worker启动通信机制
  9. html怎么把excel表格合并单元格,Excel中如何快速合并多个单元格
  10. LNMP架构介绍与搭建
  11. poj3171 Cleaning Shifts
  12. 个人工作总结10(冲刺二)
  13. tensorflow之random_normal
  14. 松灵机器人Scout代码分析 --- scout_ros
  15. C++ 动态命名和修改变量名 动态生成变量名 define
  16. 简短的计算机病毒,最简单的电脑病毒
  17. Linux内核启动过程学习
  18. 面试题,微信朋友圈的“赞”和“评论”为啥是隐藏操作的?
  19. 怎样裁剪PDF文件中的页面
  20. 阿里巴巴 29 个屌炸天的开源项目

热门文章

  1. java的运行机制与jdk和jre的区别
  2. 每日二逼事 汇总 哈哈
  3. vue.js实现用户评论、登录、注册、及修改用户部分信息功能代码。
  4. android 魅族系统升级,魅族Flyme6底层安卓系统升级到了Android7.0/7.1,为何时间这么久?...
  5. 12306客户端实现后的总结
  6. 使用OpenXML更新Word文档中的表格
  7. 极客时间-左耳听风-程序员攻略-技术资源集散地
  8. hql 语法与详细解释
  9. 《Python渗透测试编程技术:方法与实践》:网络嗅探与欺骗
  10. Excel快速将自己的名字识别为二维码