HTML5 Canvas+JS控制电脑或手机上的摄像头实例


Posted in HTML / CSS onMay 03, 2014

移动设备和桌面电脑上的客户端API起初并不是同步的。最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上。其中一个应用接口技术就是getUserMedia API,它能让应用开发者访问用户的摄像头或内置相机。下面就让我展示一下如何通过浏览器来访问你的摄像头,并提取截屏图形。

HTML代码

下面的代码里我写了一部分注释,请阅读:

复制代码
代码如下:

<!--
理想情况下我们应该先判断你的设备上是否
有摄像头或相机,但简单起见,我们在这里直接
写出了HTML标记,而不是用JavaScript先判断
然后动态生成这些标记
-->
<video id="video" width="640" height="480" autoplay></video>
<button id="snap">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>

在写出上面这些标记前应该判断用户的客户端是否有摄像头支持,但这里为了不那么麻烦,这里直接写出了这些HTML标记,需要注意的是我们这里使用的长宽是640×480。

JavaScript代码

因为我们是手工写出的HTML,所以下面的js代码会比你想象的要简单了很多。

复制代码
代码如下:

// Put event listeners into place
window.addEventListener("DOMContentLoaded", function() {
// Grab elements, create settings, etc.
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
video = document.getElementById("video"),
videoObj = { "video": true },
errBack = function(error) {
console.log("Video capture error: ", error.code);
};
// Put video listeners into place
if(navigator.getUserMedia) { // Standard
navigator.getUserMedia(videoObj, function(stream) {
video.src = stream;
video.play();
}, errBack);
} else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
navigator.webkitGetUserMedia(videoObj, function(stream){
video.src = window.webkitURL.createObjectURL(stream);
video.play();
}, errBack);
}
else if(navigator.mozGetUserMedia) { // Firefox-prefixed
navigator.mozGetUserMedia(videoObj, function(stream){
video.src = window.URL.createObjectURL(stream);
video.play();
}, errBack);
}
}, false);

一旦判断出用户浏览器支持getUserMedia ,下面就非常简单了,只需要将那个video元素的src设置为用户的摄像头视频直播连接。这就是用浏览器访问摄像头需要做的所有的事情!

拍照的功能只能说是稍微复杂一点点。我们在按钮上加入一个监听器,将视频画面画到画布上。

复制代码
代码如下:

// 触发拍照动作
document.getElementById("snap")
.addEventListener("click", function() {
context.drawImage(video, 0, 0, 640, 480);
});

当然,你还可以在图片上加一些滤镜效果….

以前我们需要使用第三方的插件才能从浏览器里访问用户的摄像头,这不免有些复杂。现在只需要HTML5的画布技术和javaScript,我们就能简单快速的操作用户的摄像头。不仅仅还是访问摄像头,而且是因为HTML5的画布技术及其强大,我们可以给图片上加入各种迷人的滤镜效果。现在,在浏览器里用自己的摄像头给自己拍张照片吧!

HTML / CSS 相关文章推荐
CSS3 倾斜的网页图片库实例教程
Nov 14 HTML / CSS
CSS3中线性颜色渐变的一些实现方法
Jul 14 HTML / CSS
CSS3 mask 遮罩的具体使用方法
Nov 03 HTML / CSS
详解Sticky Footer 绝对底部的两种套路
Nov 03 HTML / CSS
css3进阶之less实现星空动画的示例代码
Sep 10 HTML / CSS
HTML5地理定位与第三方工具百度地图的应用
Nov 17 HTML / CSS
HTML5 Canvas之测试浏览器是否支持Canvas的方法
Jan 01 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
Jul 19 HTML / CSS
使用canvas实现黑客帝国数字雨效果
Jan 02 HTML / CSS
canvas实现滑动验证的实现示例
Aug 11 HTML / CSS
css position fixed 左右双定位的实现代码
Apr 29 HTML / CSS
详解CSS伪元素的妙用单标签之美
May 25 HTML / CSS
一个不错的HTML5 Canvas多层点击事件监听实例
Apr 29 #HTML / CSS
HTML5中5个简单实用的API
Apr 28 #HTML / CSS
会走动的图形html5时钟示例
Apr 27 #HTML / CSS
html5定位并在百度地图上显示的示例
Apr 27 #HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
Apr 23 #HTML / CSS
HTML5的download属性详细介绍和使用实例
Apr 23 #HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
Apr 23 #HTML / CSS
You might like
基于header的一些常用指令详解
2013/06/06 PHP
PHP和javascript常用正则表达式及用法实例
2014/07/01 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
AngularJS 最常用的八种功能(基础知识)
2017/06/26 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
详解nodejs中express搭建权限管理系统
2017/09/15 NodeJs
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python+numpy+matplotalib实现梯度下降法
2018/08/31 Python
python3.6实现学生信息管理系统
2019/02/21 Python
Python 占位符的使用方法详解
2019/07/10 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
求职信需要的五点内容
2014/02/01 职场文书
cf搞笑广告词
2014/03/14 职场文书
文秘个人求职信范文
2014/04/22 职场文书
供应链金融服务方案
2014/05/25 职场文书
小学生植树节活动总结
2014/07/04 职场文书
戒赌保证书
2015/05/11 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang