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

步骤:

  • 开启摄像()
  • 拍照

<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. 4-pycharm找不到模块问题
  2. 常用哈希函数的比较及其实现
  3. 南开大学c语言试题,南开大学二级C语言试题库,共71页
  4. 存储池与存储卷,使用virt-install创建虚拟机
  5. 第二章--电商设计表
  6. 50道编程小题目之【判断是一年的第几天】
  7. 对接海外faceid
  8. springcloud之eureka客户端的注册
  9. mysql课设体会_课程设计心得体会8篇
  10. uniapp之安卓使用高德地图
  11. Win10麦克风显示这个设备正常但是没声音怎么解决
  12. 对上传图片进行处理,大图片压缩补白,小图片适度放大四周补白
  13. 端午安康,用python给你画盘粽子~啾啾
  14. linux pcs 所有命令,BaiduPCS-Go Windows或linux下百度网盘cmd命令行详细使用方法
  15. Windows 怎么查看是否已经真正激活
  16. python通达信5分钟转,10分钟,15分钟,30分钟,60分钟,量化交易,K线
  17. bga封装扇出_电路板设计BGA芯片扇出功能教程
  18. linux设备驱动归纳总结(八):1.总线、设备和驱动
  19. PMP 项目管理师 认识和学习路线规划
  20. [HNOI/AHOI2017]影魔

热门文章

  1. 前后端分离,如何使用Ucloud当作静态资源服务器
  2. 计算机组成M代表,计算机组成原理 --- 数据信息的表示
  3. 达内python培训心得总结优劣势详解
  4. jsp+servlet+mysql实现的小区物业停车场管理系统源码附带视频指导运行教程
  5. LTS 轻量级分布式任务调度框架(Light Task Schedule) - 推酷
  6. 《老码识途:从机器码到框架的系统观逆向修炼之路》- 第1章 - 总结
  7. 迷茫小伙参加达内Android培训获9K高薪工作
  8. 企服三会·PPT | 薪太软李昭君: 产融结合新时代,人力金融新生态
  9. 【JZOJ3231】海明距离
  10. 进阶篇:5.3.1)均方根法(Root-Sum-Squares,RSS)