演示地址: 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>