pc端调起电脑的摄像头进行拍照功能
我的需求是在电脑端调起电脑上面的摄像头,有可能是电脑自带的摄像头也可能是插入的USB摄像头
下面这个是如果用户有两个摄像头的话,会将这两个摄像头都列出来,用户可以自己选择使用哪个摄像头。
下面是html代码
<div id="container">
<div class="select">
<label for="audioSource">Audio source: </label><select id="audioSource"></select>
</div><div class="select">
<label for="videoSource">Video source: </label><select id="videoSource"></select>
</div></div>
<div id="promoNode"></div>
<video id="video" width="640" height="480" autoplay></video>
<button id="snap" class="sexyButton">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>
下面是javascript代码
//调用摄像头var canvas = document.getElementById('canvas');var context = canvas.getContext('2d');var video = document.getElementById('video');var mediaConfig = { video: true };var errBack = function (e) {console.log('An error has occurred!', e)};// Put video listeners into placeif (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {navigator.mediaDevices.getUserMedia(mediaConfig).then(function (stream) {//video.src = window.URL.createObjectURL(stream);video.srcObject = stream;video.play();});}/* Legacy code below! */else if (navigator.getUserMedia) { // Standardnavigator.getUserMedia(mediaConfig, function (stream) {video.src = stream;video.play();}, errBack);} else if (navigator.webkitGetUserMedia) { // WebKit-prefixednavigator.webkitGetUserMedia(mediaConfig, function (stream) {video.src = window.webkitURL.createObjectURL(stream);video.play();}, errBack);} else if (navigator.mozGetUserMedia) { // Mozilla-prefixednavigator.mozGetUserMedia(mediaConfig, function (stream) {video.src = window.URL.createObjectURL(stream);video.play();}, errBack);}// Trigger photo takedocument.getElementById('snap').addEventListener('click', function () {context.drawImage(video, 0, 0, 250, 200);var ImageData = canvas.toDataURL('Image/jpeg', 1);//获取canvas中绘制的数据document.getElementById("show-img").src = ImageData;//将canvas中的数据转化为图片显示$('.show-img').show();var blob = base64DateUrlToBlob(ImageData, 'image/jpeg');//将图片转为二进制});var videoElement = document.querySelector('video');var videoSelect = document.querySelector('select#videoSource');navigator.mediaDevices.enumerateDevices().then(gotDevices).then(getStream).catch(handleError);videoSelect.onchange = getStream;function gotDevices(deviceInfos) {for (var i = 0; i !== deviceInfos.length; ++i) {var deviceInfo = deviceInfos[i];var option = document.createElement('option');option.value = deviceInfo.deviceId;if (deviceInfo.kind === 'videoinput') {option.text = deviceInfo.label || 'camera ' +(videoSelect.length + 1);videoSelect.appendChild(option);} else {// console.log('Found one other kind of source/device: ', deviceInfo);}}}function getStream() {if (window.stream) {window.stream.getTracks().forEach(function (track) {track.stop();});}var constraints = {video: {deviceId: { exact: videoSelect.value }}};navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(handleError);}function gotStream(stream) {window.stream = stream; // make stream available to consolevideoElement.srcObject = stream;}function handleError(error) {//console.log('Error: ', error);}function base64DateUrlToBlob(base64DataUrl, type) {//去掉url的头,并转换为bytesvar bytes = window.atob(base64DataUrl.split(',')[1]);//处理异常,将ascii码小于0的转换为大于0var ab = new ArrayBuffer(bytes.length);var ia = new Uint8Array(ab);for (var i = 0; i < bytes.length; i++) {ia[i] = bytes.charCodeAt(i);}return new Blob([ab], { type: type });}
下面是调用用户电脑上面自带的摄像头
html代码如下
<div class="box"><video src=""></video><button class='shot'>拍照</button><canvas id='canvas'></canvas><img src=''></div>
javascript代码如下
要引入这个文件
var constraints = {audio: true, video: {width: 200,height: 250}};// 开启视频navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream) {console.log('getUserMedia:', mediaStream)var video = document.querySelector('video');video.srcObject = mediaStream;video.onloadedmetadata = function(e) {video.play();};// 使用canvas进行拍照var canvas = document.getElementById('canvas')$('button').on('click', function () {canvas.getContext('2d').drawImage(video, 0, 0, 200, 250);$('img').css('src', canvas.toDataURL("image/png"))})}).catch(function(err) {console.log(err.name + ": " + err.message);});
还有一篇讲的很详细的文章,要想深入了解的可以参考:https://www.html5rocks.com/en/tutorials/getusermedia/intro/
pc端调起电脑的摄像头进行拍照功能相关推荐
- 计算机常用屏幕分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- 使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现)
使用微信PC端的截图dll库实现微信截图功能(C++ Builder实现) 网上有很多文章说"使用微信PC端的截图dll库实现微信截图功能",我用node实现截图也要用一下,于是找 ...
- C#摄像头实现拍照功能的简单代码示例
C#摄像头实现拍照功能的简单代码示例 2009-11-20 来自:网上整理字体大小:[大中小] ·摘要:这里将介绍一个C#摄像头实现拍照功能的简单代码示例,代码虽然不短,但是基本上实现了相对应的功能 ...
- 调用PC端、手机、平板摄像头拍照
调用PC端摄像头拍照 HTML代码: <div id="android-camera"><input type="button" title= ...
- pc端ui图片尺寸_pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- 现在计算机常用的分辨率,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- html电脑屏幕尺寸,pc端常用电脑屏幕 ((响应式PC端媒体查询)电脑屏幕分辨率尺寸大全)...
PC端************ 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.1 ...
- (@media 响应式PC端媒体查询)电脑屏幕分辨率尺寸大全
PC端 按屏幕宽度大小排序(主流的用橙色标明) 分辨率 比例 | 设备尺寸 1024*500 (8.9寸) 1024*768 (比例4:3 | 10.4寸.12.1寸.14.1寸.15寸; ) 128 ...
- pc端文本_使用即将推出的Windows功能从PC发送文本
pc端文本 Windows/Android/iPhone: Send and receive SMS messages on your PC, and access all the files on ...
最新文章
- Linux中的 awk查找日志中的相关记录
- python课程费用-深圳python课程费用
- 数据结构(终极线段树篇)
- MAC 安装 pygraphviz 找不到头文件
- gnome没有命令行_命令行提示,喜欢GNOME的8个理由,自动Raspberry Pi备份等
- Pentium II Pentium III架构/微架构/流水线 (1) - 架构概述
- C算法编程题(七)购物
- flash制作文字笔顺_flash动画课件制作有什么优点
- Atitit. 解决unterminated string literal 缺失引号
- 根据关键词获取多平台的商品列表接口解析
- IBM推出新功能 加速AI应用
- python堆积图的画法_不再羡慕别人的漂亮图表,一文学会如何用Python绘制堆积图...
- 手机版制作H5页面免费工具大集合
- 快递面单打印报错:“print selected is not valid” 解决方案
- 计算机系的的毕业感言,计算机班同学的毕业感言
- 计算机管理的磁盘管理简单卷,win7磁盘管理分区后无法新建简单卷怎么解决
- 未来汽车是什么样?取消后视镜的车型将于2019年面世 | 行业
- 26进制(A到Z表示1到26,例27:AA,2019:BYQ)
- css 文本超出2行就隐藏并且显示省略号
- java生成8位的uuid_分布式系统全局唯一ID简介、特点、生成
热门文章
- 乒乓球捡球机器人_捡球机器人
- 【转载】高通msm8996平台的ASOC音频路径分析(基于androidN及linux3.1x)
- Linux-Day1笔记
- Python使用Xpath轻松爬虫(脑残式)
- 腾讯视频有linux软件吗,诚意满满:腾讯视频Linux版实测
- 上海市邮政编码|上海市各区县邮编
- 消防设备电源监控系统在城市建筑中的应用
- 高等数学(第七版)同济大学 习题3-4 个人解答(后8题)
- 游戏本方便学C语言吗,为什么游戏本都不使用便携的C口充电器?一句话:厂商懒...
- 从《Doom》到《Dunia》 回顾3D游戏引擎发展历程二