其实是一个图片上传功能,但是呢需求不是让做成传统的图片上传。

步骤:

  • 开启摄像()
  • 拍照

<video id="video" width="400" height="400" poster="../img/video_fill_light.png"></video>
<canvas id="canvas" width="300px" height="300px"></canvas>
<button type="button" @click="getMedia()" v-if="flag">点击获取摄像头权限</button>
<button type="button" @click="takePhoto()" v-else>点击认证</button>getMedia() {let constraints = {video: {width: 500,height: 500,facingMode:'user'},audio: false};//获得video摄像头区域let video = document.getElementById("video");//video设置/** 处理iPhone的Safari浏览器打开相机只有一帧图像问题* 在调用 getUserMedia 之前设置(iOS11、12均生效,iOS13可以不再设置)*/video.setAttribute('autoplay', '');video.setAttribute('muted', '');video.setAttribute('playsinline', '');// 参考网站:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices/getUserMediaif (navigator.mediaDevices === undefined) {navigator.mediaDevices = {};}if (navigator.mediaDevices.getUserMedia === undefined) {navigator.mediaDevices.getUserMedia = function (constraint) {// 首先,如果有getUserMedia的话,就获得它var getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;// 一些浏览器根本没实现它 - 那么就返回一个error到promise的reject来保持一个统一的接口if (!getUserMedia) {// 如果未启用https,那么微信,苹果都会进入这里,表现为没有实现。var isiOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);if (isiOS) {return Promise.reject(new Error('请升级系统到 iOS 14.3 及以上版本或换用安卓手机'));} else {return Promise.reject(new Error('设备调用异常,请联系管理员'));}}// 否则,为老的navigator.getUserMedia方法包裹一个Promise(这里就兼容了旧版的使用方法)return new Promise(function (resolve, reject) {getUserMedia.call(navigator, constraint, resolve, reject);});}}let promise = navigator.mediaDevices.getUserMedia(constraints);promise.then((stream) => {if ("srcObject" in video) {video.srcObject = stream;} else {// 防止在新的浏览器里使用它,应为它已经不再支持了video.src = window.URL.createObjectURL(stream);}video.onloadedmetadata = function (e) {video.play();};}).catch((err) => {var errStr = err.toString();if (errStr.indexOf('NotAllowedError') != -1) {vant.Toast('请允许摄像头权限');} else if (errStr.indexOf('Error') == 0) {// 去掉前面的“Error:”字符串vant.Toast(errStr.slice(6));} else {vant.Toast('设备调用异常,请联系管理员');}})},
takePhoto() {let canvas1=document.getElementById("canvas");let ctx = canvas1.getContext('2d');ctx.drawImage(video, 0, 0, 300, 300);//将canvas对象转换为base64位编码传到后台this.convertCanvasToImage(canvas1.toDataURL())}

遇到了很多兼容性问题:
1、iPhone的Safari浏览器打开相机有点问题
2、iPhone将h5嵌到app里面必须让用户手动获取摄像头权限
…当时还有些兼容性问题的…忘记了
注意点:
1、 iOS 14.3 及以下版本不支持MediaDevices.getUserMedia()
2、要在https的环境使用

移动端开启摄像头拍照截取图片功能实现相关推荐

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

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

  2. python读取网络摄像头的帧_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  3. python抓取网络摄像头_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  4. python编写的网络摄像头_python实现从本地摄像头和网络摄像头截取图片功能

    python-----从本地摄像头和网络摄像头截取图片 ,具体代码如下所示: import cv2 # 获取本地摄像头 # folder_path 截取图片的存储目录 def get_img_from ...

  5. Python之实现自动开启摄像头拍照,后面发送邮寄给个人

    Python之实现自动开启摄像头拍照,后面发送邮寄给个人 文章目录 Python之实现自动开启摄像头拍照,后面发送邮寄给个人 第一步,我们要开启电脑的摄像头实现拍照: 第二步,我们要发送邮件,就必须创 ...

  6. h5开启摄像头拍照+腾讯云接口人脸验证

    前端开启摄像头并拍照将照片的base64码传到后端 <div> //登录弹出框 <el-form ref="form" :model="form&quo ...

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

    export default { () { return {} }, methods: { # // 压缩图片 and 旋转角度纠正 下方代码 # 需要自行去掉 个人只作为着色效果加上 compres ...

  8. C# 开启摄像头 拍照

    引用 Aforge Aforge 介绍:http://baike.baidu.com/link?url=T3XRoneXNTVU8Hoh2tNOtiBYXCPBYmslpVUWWPw4c2pxyclF ...

  9. html5图片上传时IOS和Android均显示摄像头拍照和图片选择

     最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料 ...

最新文章

  1. 机器学习 python_送书 | 深入浅出Python机器学习
  2. [Poetize6] IncDec Sequence
  3. python中如何打开csv文件_在Python中从CSV文件读取数据
  4. 业务场景是什么意思_深度思考:麦乐积分兑换商城系统业务逻辑
  5. Python 数据分析三剑客之 Pandas(八):数据重塑、重复数据处理与数据替换
  6. hadoop2.8配置_Hadoop2.8.2安装与配置(单机)
  7. 颜宁:批评一下当年的「颜宁同学」
  8. 前端Http协议缓存初解
  9. Linux:十条为系统管理员节省时间的命令
  10. 香港理工大学人工智能设计实验室 博士后 招聘
  11. 在React中加载数据:redux-thunk,redux-saga,suspense,hooks
  12. Oracle XE安装具体解释
  13. LumaQQ.NET,基于LumaQQ的.NET开源QQ开发包
  14. 简单的多线程操作示例
  15. debian网络配置文件的写法
  16. classloader隔离练习
  17. 拓端tecdat:R语言集成模型:提升树boosting、随机森林、约束最小二乘法加权平均模型融合分析时间序列数据
  18. 手把手教做无盘服务器,手把手教你做锐起无盘(完整).doc
  19. 电脑使用过程中“xx指令引用的xx内存。该内存不能为written或read”的解决方案!
  20. 获取U盘 VID,PID

热门文章

  1. win10局域网共享文件、共享硬盘。
  2. RocketMQ源码(十七)—Broker处理DefaultMQPushConsumer发起的拉取消息请求源码
  3. 戴尔R620安装server2008 R2系统操作说明
  4. opencv项目实战(二)——文档扫描OCR识别
  5. 拒绝“累丑”,告别加班,一键读取Excel表格数据自动录入至网页
  6. 苏州六西格玛绿带企业成功实施六西格玛项目原因
  7. CAEE广东家电配件展-家电零部件展——CAEE家电与电子电器供应链博览会
  8. 蓝色简约储云商城官网源码
  9. 40岁程序员写出租车一键下单电话叫车软件后被发帖骂骗子写得太烂
  10. 最简单的办法,不用安装任何软件,就屏蔽ClickEye(点睛广告)