JavaScript:模拟拍照

news/2024/5/11 3:55:54/文章来源:https://blog.csdn.net/qq_40850839/article/details/127400540

实现拍照功能需要使用电脑的摄像头,可以使用 navigator.mediaDevices.getUserMedia() 方法,传递相应的参数就能开启摄像头

navigator.mediaDevices 是一个媒体设备对象,通过 getUserMedia( )方法开启音频和视频媒体设备。

getUserMedia
参数:

  • options:需要开启的设备的配置对象,可以开启audio、video

getUserMedia() 方法返回的是一个promise,promise得到的结果是 mediaStream 对象。把它赋值给 video.srcObject 就能播放。

开启视频媒体设备,需要在参数中设置

navigator.mediaDevices.getUserMedia({video:true}).then(res => {});

上面是简单的使用摄像头的能力,还可以设置摄像头的分辨率

// 设置固定值
navigator.mediaDevices.getUserMedia({video:{width:2400, height:1080}}).then(res => {});
// 设置区间
navigator.mediaDevices.getUserMedia({video:{width:{min:1080,max:2400}, height:{min:1080,max:2400}}}).then(res => {});

还可以设置使用前摄像头还是后摄像头

// 使用前摄像头
navigator.mediaDevices.getUserMedia({video:{facingMode:'user'}}).then(res => {});// 使用后摄像头
navigator.mediaDevices.getUserMedia({video:{facingMode:{ext:'enviroment'}}}).then(res => {});

开启音频设备

navigator.mediaDevices.getUserMedia({audio:true});

示例

<img src="" alt="" id="img" /><canvas id="canvas"></canvas><video src="" id="video"></video><button id="button"></button>
navigator.mediaDevices.getUserMedia({video:true}).then(meidaStream => {const video = document.getElementById('video');const button = document.getElementById('button');const canvas = document.getElementById('canvas');const img = document.getElementById('img');// 设置为none不让其他的元素显示,只显示最终的结果video.style.display = 'none';canvas.style.display = 'none';// 把摄像头得到的数据流,赋值给video让其显示video.srcObject = mediaStream;video.onloadmetadata = function (){// video播放得到的数据流video.play();}button.onclick = function (){// 按钮点击的时候暂停播放,把当前的视频帧传递给canvas绘制然后通过toDataURL()方法导出图片video.pause();canvas.drawImage(video, 0, 0, canvas.width, canvas.height);const imgSrc = canvas.toDataURL();img.src = imgSrc;}
});

补充

mediaDevices 对象处理上面使用的方法外,还有下面这些事件和方法

方法

  • enumerateDevices():列举出能使用的输入、输出的媒体设备
    该方法返回一个promise对象,promise返回的数据是可使用的媒体设备的列表
navigator.mediaDevices.enumerateDevices().then(res => {console.log(res);});

在这里插入图片描述

事件

devicechange:当设备连接到系统或移除时触发

该事件可以用于监听设备的连接,当有设备连接时获取设备,没有设备时可以向客户端输出提示信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_404111.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文献阅读-融合注意力机制的 IETM 细粒度跨模态检索算法

引用格式&#xff1a;翟一琛&#xff0c;顾佼佼&#xff0c;宗富强&#xff0c;姜文志&#xff0e;融合注意力机制的 IETM 细粒度跨模态 检索算法[J/OL]&#xff0e;系统工程与电子技术. https://kns.cnki.net/kcms/detail/11.2422.TN.20220823.1030.004.html 期刊&#xff1a…

跟李沐学AI-动手学深度学习1

整体内容 神经网络可以理解为是一种语言 数学和代码的结合&#xff0c;道术结合&#xff0c;关键在动手 是什么&#xff0c;怎么做&#xff0c;为什么这样 发展知识和应用 广告点击预测三个步骤 预测和训练 模型控制广告展现 数据格式 0维&#xff0c;1维&#xff0c…

【仿牛客网笔记】初识Spring Boot,开发社区首页-MyBatis入门

安装MySQL Server 安装MySQL Workbench 安装过程略。。。 Mybatis手册 Mybatis整合 Mybatis的核心组件&#xff1a; SqlSessionFactory:用于创建SqlSessionFactory工厂类。 SqlSession&#xff1a;Mybatis的核心组件&#xff0c;用于数据库执行SQL 主配置文件&#xff1a;XM…

大一学生期末大作业 html+css+javascript网页设计实例【电影购票项目】html网页制作成品代码

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

java面试题总结-1

Java语言特点 &#xff08;1&#xff09;简单易学、有丰富的类库 &#xff08;2&#xff09;面向对象&#xff08;java最重要的特性&#xff0c;让程序耦合度更低&#xff0c;内聚性更高&#xff09; &#xff08;3&#xff09;与平台无关性&#xff08;JVM是Java跨平台使用的…

拦截器和过滤器

拦截器和过滤器 参考&#xff1a; 过滤器和拦截器的区别_至今没搞明白的博客-CSDN博客_过滤器和拦截器的区别 拦截器与过滤器的区别_℡tang的博客-CSDN博客_拦截器和过滤器的区别 文章目录拦截器和过滤器过滤器概念作用Filter链与Filter生命周期SpringBoot 实现过滤器方式一…

如何将各大网盘整合到一起顺便挂载本地使用(文末附软件获取方式)

目录 1、Alist.exe 2、RaiDrive 今天发现了一个网盘变硬盘神器&#xff0c;它不仅安全免费&#xff0c;更全面支持&#xff1a;百度网盘、阿里云盘、天翼云盘、蓝奏云、闪电盘、夸克网盘、迅雷网盘、等众多你们听过&#xff0c;以及没有听过的所有网盘&#xff01; 直接先看效…

Mac环境下反编译工具的使用

日常工作中避免不了反编译工具经常安装&#xff08;换电脑设备、手滑把文件夹删除了。。。等等原因&#xff09;&#xff0c;而且时间一久忘记命令的使用&#xff0c;因此做下记录。 一、反编译工具三件套 apktool&#xff1a;获取apk里的资源文件、配置文件、清单文件、lib文…

毕业论文中引用方法、原理、定义等 如何降重才更有效果?

论文重复率过高是一件很痛苦的事&#xff0c;我当年的本科论文&#xff0c;一共查了四遍才过。 我的查重方法其实比较简单&#xff0c;初稿出来以后我就开始查重了&#xff0c;然后按照标注把标红的部分全部修改掉&#xff0c;而后以此类推&#xff0c;每次改外&#xff0c;或…

BIM+物联网应用,可以解决生活中的诸多问题?

hi&#xff0c;还是我&#xff0c;建模助手。 本期的头条我们聊过有关于元宇宙、BIM和智慧城市之间的些许关联。顺着这条线&#xff0c;再和大家说说更深入的东西——物联网。 它与BIM的结合&#xff0c;可以解决生活中的哪些问题。 01 物联网与BIM关系 在建筑走向智能的时代&a…

ProGAN 论文精读

作者&#xff1a;Tero Karras, Timo Aila, Samuli Laine, Jaakko Lehtinen单位&#xff1a;NVIDIA发表期刊&#xff1a;ICLR 2018 一、前期知识储备&#xff1a; 1.1DCGAN&#xff1a; 1.1.1模型结构&#xff1a; 1.1.2项目地址&#xff1a; github git clone https://git…

【附源码】计算机毕业设计SSM数据分析教学网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

微信公众号搭建查题系统

微信公众号搭建查题系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;…

Go Machine Learning

Go Machine Learning 前言 最近因为一直在弄部署整天c写的非常头疼,趁着昨天把分割部署写好后打算换换口味,想着试试Go语言来实现一些机器学习,深度学习会是什么样子.之前推荐过Go(goplus),不过这次打算用更基础的go语法来尝试. 1.准备工作 对于某个从未涉及的领域一开始肯…

硬盘分哪几种类型及主要参数详解

硬盘分哪几种类型 按接口分为:ide、sata、scsi 。 按大小分1.8英寸、 2.5英寸、 3.5英寸、 5.25英寸。 转速分为&#xff1a; 4500转,5400转&#xff0c;7200转和万转。 缓存分为&#xff1a;2m、8m、16m。 硬盘主要参数 硬盘主要参数详解&#xff1a; 转速&#xff1a;硬盘…

Web前端:所有新前端开发人员应该具备的顶级技能

作为前端开发人员&#xff0c;确保软件程序的用户界面正常运行是你的工作&#xff0c;这是一项艰巨的工作&#xff0c;因为你必须确保每个组件都按照预期的方式工作&#xff0c;这样用户才能有良好的体验。 前端开发现在需求量很大。前端开发者管理软件的用户界面/ UX。这很重要…

我不得不学的反射

什么是反射 反射是指对于任何一个Class类&#xff0c;在运行时都可以直接得到这个类的全部成分 这种运行时动态获取信息以及动态调用类中成分的能力称为java的反射机制 获取字节码文件 获取反射对象 方法一 public static void main(String[] args) throws Exception {Cla…

学生选课系统 前后端分离 vue springboot

学生选课系统 前后端分离 vue springboot系统描述一、系统功能二、系统截图1.网络爬虫 新闻获取代码2.pom源码系统描述 基于spring boot vue的学生选课系统 前端&#xff1a; Vue ElementUI axios 后端 springboot 持久层 mybatis Plus 会话 Spring Session redis 日志 AOP Mo…

程序设计与算法(三)C++面向对象程序设计笔记 第七周 输入输出和模板

笔记按照中国大学MOOC上北京大学郭炜老师主讲的程序设计与算法&#xff08;三&#xff09;C面向对象程序设计所作&#xff0c;B站上也有资源。原课程链接如下&#xff1a; 程序设计与算法&#xff08;三&#xff09;C面向对象程序设计 其他各章节链接如下&#xff1a; 程序设…

《CTF攻防世界web题》之我什么都不会(1)

前言 &#x1f340;作者简介&#xff1a;被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 &#x1f341;个人主页&#xff1a;被吉师散养的职业混子 &#x1fad2;文章目的&#xff1a;记录唯几我能做上的题 &#x1f342;相应专栏&#xff1a;CT…