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实现的闪烁跳跃进度条示例(附源码)
Aug 19 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
Nov 15 HTML / CSS
css3的focus-within选择器的使用
May 11 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
Oct 16 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
May 27 HTML / CSS
HTML5页面直接调用百度地图API获取当前位置直接导航目的地的实现代码
Mar 02 HTML / CSS
AmazeUI框架搭建的方法步骤(图文)
Aug 17 HTML / CSS
Canvas如何做个雪花屏版404的实现
Sep 25 HTML / CSS
postman中form-data、x-www-form-urlencoded、raw、binary的区别介绍
Jan 18 HTML / CSS
css3新特性的应用示例分析
Mar 16 HTML / CSS
el-form每行显示两列底部按钮居中效果的实现
Aug 05 HTML / CSS
css中:last-child不生效的解决方法
Aug 05 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
php+mysql分页代码详解
2008/03/27 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php文件下载处理方法分析
2015/04/22 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
用javascript实现点击链接弹出&quot;图片另存为&quot;而不是直接打开
2007/08/15 Javascript
JS查看对象功能代码
2008/04/25 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
探究Vue.js 2.0新增的虚拟DOM
2016/10/20 Javascript
微信小程序 数据绑定及运算的简单实例
2017/09/20 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
JS实现简易日历效果
2021/01/25 Javascript
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
python3注册全局热键的实现
2020/03/22 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
python FTP编程基础入门
2021/02/27 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
机械专业应届生求职信
2013/09/21 职场文书
大专生自我鉴定范文
2013/10/01 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
2014年财务部工作总结
2014/11/11 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
三峡人家导游词
2015/01/31 职场文书
教师个人工作总结范文2015
2015/10/14 职场文书
小学音乐课教学反思
2016/02/18 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS