使用HTML5拍照示例代码


Posted in HTML / CSS onAugust 06, 2013

演示地址: HTML5拍照演示
首先,我们看看HTML代码结构,当然,这部分的DOM内容应该是在用户允许使用其摄像头事件出发后,动态加载生成的。
注意: 我们采用的是 640X480的分辨率,如果采用JS动态生成,那么您是可以灵活控制分辨率的。

复制代码
代码如下:

<!--
声明: 此div应该在允许使用webcam,网络摄像头之后动态生成
宽高: 640 *480,当然,可以动态控制啦!
-->
<!--
Ideally these elements aren't created until it's confirmed that the
client supports video/camera, but for the sake of illustrating the
elements involved, they are created with markup (not JavaScript)
-->
<video id="video" width="640" height="480" autoplay></video>
<button id="snap">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>

JavaScript
只要上面的HTML元素创建完成,那么JavaScript部分将简单的超乎你想象的简单:
复制代码
代码如下:

// 设置事件监听,DOM内容加载完成,和jQuery的$.ready() 效果差不多。
window.addEventListener("DOMContentLoaded", function() {
// canvas 元素将用于抓拍
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
// video 元素,将用于接收并播放摄像头 的数据流
video = document.getElementById("video"),
videoObj = { "video": true },
// 一个出错的回调函数,在控制台打印出错信息
errBack = function(error) {
if("object" === typeof window.console){
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);
}
// 对拍照按钮的事件监听
document.getElementById("snap").addEventListener("click", function() {
// 画到画布上
context.drawImage(video, 0, 0, 640, 480);
});
}, false);

最后,记得讲您的网页放到web服务器下面,然后通过http协议来访问哦。
另外,需要浏览器版本较新,并且支持HTML5的相关新特性才可以。
译者不算称职啦,没有按原文来翻译。使用的浏览器是chrome 28。
最后,贴上完整的代码,比较呆板。
复制代码
代码如下:

<!DOCTYPE html>
<html>
<head>
<title> 浏览器webcamera </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="renfufei@qq.com">
<meta name="Description" content="inveted by: http://davidwalsh.name/browser-camera">
<script>
// 设置事件监听,DOM内容加载完成,和jQuery的$.ready() 效果差不多。
window.addEventListener("DOMContentLoaded", function() {
// canvas 元素将用于抓拍
var canvas = document.getElementById("canvas"),
context = canvas.getContext("2d"),
// video 元素,将用于接收并播放摄像头 的数据流
video = document.getElementById("video"),
videoObj = { "video": true },
// 一个出错的回调函数,在控制台打印出错信息
errBack = function(error) {
if("object" === typeof window.console){
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);
}
// 对拍照按钮的事件监听
document.getElementById("snap").addEventListener("click", function() {
// 画到画布上
context.drawImage(video, 0, 0, 640, 480);
});
}, false);
</script>
</head>
<body>
<div>
<!--
声明: 此div应该在允许使用webcam,网络摄像头之后动态生成
宽高: 640 *480,当然,可以动态控制啦!
-->
<!--
Ideally these elements aren't created until it's confirmed that the
client supports video/camera, but for the sake of illustrating the
elements involved, they are created with markup (not JavaScript)
-->
<video id="video" width="640" height="480" autoplay></video>
<button id="snap">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>
</div>
</body>
</html>
HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
CSS3伪类选择器:nth-child()
Apr 02 HTML / CSS
用CSS3将你的设计带入下个高度
Aug 08 HTML / CSS
CSS3媒体查询Media Queries基础学习教程
Feb 29 HTML / CSS
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
Sep 15 HTML / CSS
CSS3 二级导航菜单的制作的示例
Apr 02 HTML / CSS
基于CSS3的animation属性实现微信拍一拍动画效果
Jun 22 HTML / CSS
关于HTML5语义标签的实践(blog页面)
Jul 12 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
Oct 23 HTML / CSS
HTML5自定义属性的问题分析
Aug 16 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
Jan 25 HTML / CSS
CSS实现五种常用的2D转换
Dec 06 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
Aug 02 #HTML / CSS
HTML5 Canvas自定义圆角矩形与虚线示例代码
Aug 02 #HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
Aug 02 #HTML / CSS
使用HTML5的File实现base64和图片的互转
Aug 01 #HTML / CSS
HTML5 中新的全局属性(整理)
Jul 31 #HTML / CSS
html5文字阴影效果text-shadow使用示例
Jul 25 #HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
Jul 25 #HTML / CSS
You might like
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
Cakephp 执行主要流程
2010/03/24 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
php图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
Python实现栈的方法
2015/05/26 Python
Django进阶之CSRF的解决
2018/08/01 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
python 提取文件指定列的方法示例
2019/08/07 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
Python处理mysql特殊字符的问题
2020/03/02 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
如何利用find命令查找文件
2015/02/07 面试题
大学四年的个人自我评价
2014/01/14 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
教师读书笔记
2015/06/29 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
laravel ajax curd 搜索登录判断功能的实现
2021/04/17 PHP
Python基于Opencv识别两张相似图片
2021/04/25 Python