如果人生是一个圆,那么总会有一个人是你最终的切线。

注意: 必须使用https哦~

功能点

  • 拍照

    • 微信内置浏览器 (iPhone13 Pro)
    • QQ内置浏览器 (小米 Mix3)
    • QQ内置浏览器 (iPhone13 Pro)
    • 自带浏览器 (小米 Mix3)
    • 自带浏览器 (iPhone13 Pro)
  • 保存图片
    • 微信内置浏览器 (iPhone13 Pro)
    • QQ内置浏览器 (小米 Mix3)
    • QQ内置浏览器 (iPhone13 Pro)
    • 自带浏览器 (小米 Mix3)
    • 自带浏览器 (iPhone13 Pro)

写法上没有做很多兼容性的处理,大概写了一下逻辑。

效果


代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script><style>body {margin: 0;}html,body,video,canvas {width: 100%;height: 100%;}.take-photo,.save-photo {width: 70px;height: 70px;background-image: linear-gradient(120deg, #a1c4fd 0%, #c2e9fb 100%);border-radius: 50%;position: absolute;left: 50%;bottom: 120px;transform: translateX(-50%);}.save-photo {background-image: linear-gradient(120deg, #d4fc79 0%, #96e6a1 100%);}.save-photo:active,.take-photo:active {opacity: .7;}</style>
</head><body><video></video><canvas></canvas><div class="take-photo"></div><div class="save-photo"></div><script>let vConsole = new window.VConsole();let video = document.querySelector('video');let canvas = document.querySelector("canvas");let taskPhoto = document.querySelector('.take-photo')let savePhoto = document.querySelector('.save-photo')canvas.hidden = true;taskPhoto.hidden = true;savePhoto.hidden = true;if (navigator.mediaDevices.getUserMedia) {// facingMode: "user" 前置摄像头// facingMode: { exact: "environment" } 强制使用后置摄像头let constraints = { audio: false, video: { width: document.body.clientHeight, height: document.body.clientWidth, facingMode: { exact: "environment" } } };navigator.mediaDevices.getUserMedia(constraints).then(function (mediaStream) {video.setAttribute('autoplay', '');video.setAttribute('muted', '');video.setAttribute('playsinline', '');video.srcObject = mediaStream;taskPhoto.hidden = false;}).catch(function (err) { console.log(err.name + ": " + err.message); }); // 总是在最后检查错误} else console.log("您的浏览器不支持");taskPhoto.addEventListener('click', () => {let c = canvas.getContext('2d');canvas.width = video.clientWidth;canvas.height = video.clientHeight;c.drawImage(video, 0, 0, video.clientWidth, video.clientHeight);video.pause();canvas.hidden = false;savePhoto.hidden = false;taskPhoto.hidden = true;})savePhoto.addEventListener('click', () => {let a = document.createElement('a');a.href = canvas.toDataURL()a.download = "照片.png";a.click();savePhoto.hidden = true;canvas.hidden = true;taskPhoto.hidden = false;video.play();});</script>
</body></html>

H5 调用摄像头进行拍照相关推荐

  1. Atititjs h5调用摄像头视频聊天 拍照功能 相机功能 录像attilax总结

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Atit ...

  2. 摄像头自建html直播,html5调用摄像头实现拍照

    html5调用摄像头实现拍照 拍照 var video=document.getElementById("video"); var context=canvas.getContex ...

  3. 在网页中调用摄像头实现拍照上传 - 高拍仪二次开发

    在网页中调用摄像头实现拍照上传 高拍仪二次开发     在一些公共部门的办事处,比如银行.护照办理中心.税务等,我们可能会注意到办公桌上摆着这样一台机器.办公人员用它拍摄各种证件.文件.表格,有时候还 ...

  4. c++ 二次开发 良田高拍仪_在网页中调用摄像头实现拍照上传 - 高拍仪二次开发...

    来源于  https://blog.csdn.net/weixin_40659738/article/details/78252562 在网页中调用摄像头实现拍照上传 高拍仪二次开发 在一些公共部门的 ...

  5. Python+opencv调用摄像头实现拍照并保存

    Python+opencv调用摄像头实现拍照并保存 安装 OpenCV库 详细源码 注意事项 安装 OpenCV库 pip install opencv-python 详细源码 调用外接摄像头实现拍照 ...

  6. Python进阶,使用 opencv 调用摄像头进行拍照

             opencv 支持 Python 版本的模块叫作 opencv-p hon ,可直接使用 pip install opencv-python 令进行安装,但常常会因为网络等问题导致失 ...

  7. vue中如何调用ios摄像头_如何使用Vue2.0调用摄像头进行拍照

    这次给大家带来如何使用Vue2.0调用摄像头进行拍照,使用Vue2.0调用摄像头进行拍照的注意事项有哪些,下面就是实战案例,一起来看一下. import {Exif} from './exif.js' ...

  8. chrome摄像头java_Chrome 谷歌浏览器调用摄像头并拍照上传 java示例

    html页面: html5调用摄像头实现拍照 拍照 var video=document.getElementById("video"); var context=canvas.g ...

  9. h5调用摄像头+拍照+上传图片-----h5+js+ajax

    敬请关注博客,后期不断更新优质博文,谢谢 项目中需要用到调用摄像头拍照并上传照片到后台,特此记录:如有不足,望广大同行们批评指出. 1,前端页面 visitor/touch/touchIndex/li ...

  10. 用html5和javascript调用摄像头实现拍照功能

    在机缘巧合之下,了解到用HTML5和javascript调用摄像头来实现拍照功能,今天就把大致原理写下来.页面布局很简单,就是一个input标签,两个HTML5元素video.canvas和一个but ...

最新文章

  1. python 正则表达式 查找 替换 文本
  2. Codeforces 1196B Odd Sum Segments
  3. Html百分比设宽偏差大,absolute和relative元素 设置百分比宽高的差异
  4. [内核编程] 内核环境及其特殊性,驱动编程基础篇
  5. linux 进程重启脚本
  6. 31 个用来测试你网站各项性能的免费在线工具
  7. 从Applet中读取Cookie Access Cookies from a Java Applet
  8. java中printreader类_Java基本字符流输入输出类的使用
  9. 1022. Digital Library
  10. 西安石油大学计算机类分专业,西安石油大学2019年分专业录取分数解读
  11. 【HAVENT原创】NodeJS 短网址开发(调用第三方接口)
  12. bzoj1003[ZJOI2006]物流运输
  13. java常见异常和代码演示
  14. solidity 合约地址转钱包、钱包地址转合约
  15. Asp.Net Core 系列教程 (三)身份认证
  16. Android UI开发神兵利器之设计资源
  17. 中粮营销致远A6应用探秘:高速审批执行,营销策略落地
  18. 成功解决error: no match for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘Eigen::Quate
  19. 分析百度手机助手协议(实现app下载量上涨)
  20. 恒压板框过滤实验数据处理_陕西延安GPJ120配件设备,陕西加压过滤机改造

热门文章

  1. SI4438可变长包数据收发
  2. 基于minio及tus断点续传及断点下载解决方案
  3. bat脚本实现一键IP切换
  4. catia批量转stp文件格式_CATIA CGR格式文件转stp或igs文件 | 坐倚北风
  5. C#带命令行参数调用外部程序
  6. [Visio 2007]解决 “类图”调整宽度后,换行的文字溢出的问题(如何调整“类图”的高度?)
  7. 蝗虫优化算法(GOA)优化深度置信网络DBN【matlab源码】
  8. obs无法录制mkv视频文件的解决方法
  9. Mysql索引优化及面试题
  10. libcrypto.so.1.0.0缺失问题