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 相关文章推荐
全面总结使用CSS实现水平垂直居中效果的方法
Mar 10 HTML / CSS
css3 按钮 利用css3实现超酷下载按钮
Mar 18 HTML / CSS
CSS书写规范、顺序和命名规则
Mar 06 HTML / CSS
纯CSS3实现的8种Loading动画效果
Jul 05 HTML / CSS
CSS3制作苹果风格键盘特效
Feb 26 HTML / CSS
CSS3使用transition属性实现过渡效果
Apr 18 HTML / CSS
CSS3中媒体查询结合rem布局适配手机屏幕
Jun 10 HTML / CSS
前端canvas动画如何转成mp4视频的方法
Jun 17 HTML / CSS
用HTML5实现网站在windows8中贴靠的方法
Apr 21 HTML / CSS
详解webapp页面滚动卡顿的解决办法
Dec 26 HTML / CSS
CSS控制继承中的height能变为可继承吗
Jun 10 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数字格式化
2006/12/06 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
谈谈对offsetleft兼容性的理解
2015/11/11 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
Angular使用cli生成自定义文件、组件的方法
2018/09/04 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
2019/05/07 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
浅谈python对象数据的读写权限
2016/09/12 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
使用python进行拆分大文件的方法
2018/12/10 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
python批量修改ssh密码的实现
2019/08/08 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
python 实现简单的FTP程序
2019/12/27 Python
python numpy数组中的复制知识解析
2020/02/03 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
南京软件公司的.net程序员笔试题
2014/08/31 面试题
几个Shell Script面试题
2012/08/31 面试题
九年级数学教学反思
2014/02/02 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
廉政承诺书范文
2015/04/28 职场文书