新聞中心
最近在搞一個(gè)考試系統(tǒng),系統(tǒng)要求要有隨機(jī)拍照的功能,并且攝像頭能夠收到j(luò)s的控制。在線攝像頭嘛,就那兩種實(shí)現(xiàn)的方式:cab或者flash。

10年的汝陽(yáng)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整汝陽(yáng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“汝陽(yáng)網(wǎng)站設(shè)計(jì)”,“汝陽(yáng)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
暫且不論本人從沒(méi)學(xué)過(guò)的flash(事實(shí)上我已經(jīng)做了一個(gè)flash調(diào)用攝像頭的demo,雖然是調(diào)用成功了,但是對(duì)于拍照部分我實(shí)在是無(wú)力了,況且還有js控制flash部分的代碼更是令人頭痛。)。
本來(lái)之前本人已經(jīng)開(kāi)發(fā)了一個(gè)攝像頭的cab,但是activeX嘛,只能給IE用用,兼容性和穩(wěn)定性都不是很好。于是現(xiàn)在開(kāi)始研究基于HTML5的在線攝像頭。
首先看效果
Html5大家也漸漸的不那么陌生了,至少也得知道只有少數(shù)瀏覽器能很好的兼容HTML5吧。所以測(cè)試環(huán)境是Chrome 18以上版本,并且在測(cè)試前應(yīng)開(kāi)啟瀏覽器的MediaStream:在地址欄輸入about:flags,啟用MediaStream。
然后就可以開(kāi)始敲代碼了。
#p#
不過(guò)值得注意的是,HTML5的測(cè)試不能再本地直接打開(kāi)html網(wǎng)頁(yè),而是需要在http上訪問(wèn)html頁(yè)面。直接搭建IIS,apache或者直接通過(guò)VS來(lái)查看html5頁(yè)面。
1、 視頻流添加一個(gè)Video標(biāo)簽,并調(diào)用getUserMedia獲得用戶的攝像頭視頻流。
- var video = document.getElementById("video");
- navigatornavigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
- if (navigator.getUserMedia) {
- if (navigator.webkitURL) {
- navigator.getUserMedia("video", function (stream) {
- video.src = window.webkitURL.createObjectURL(stream);
- }, function (error) { alert(error); });
- }
- else {
- navigator.getUserMedia("video", function (stream) {
- video.src = window.webkitURL.createObjectURL(stream);
- }, function (error) { alert(error); });
- }
- }
- else {
- alert("navigator.getUserMedia Error");
- }
這樣,運(yùn)行以后便可以直接在網(wǎng)頁(yè)中調(diào)用攝像頭了。運(yùn)行后會(huì)提示
2、 拍照
用Canvas捕獲Video標(biāo)簽的內(nèi)容并顯示,就做到了拍照的效果。
同樣先添加一個(gè)canvas標(biāo)簽和一個(gè)button按鈕
button點(diǎn)擊后調(diào)用JS,把Video標(biāo)簽中當(dāng)前的圖像顯示到canvas中,效果就不做演示了
- function scamera() {
- var videoElement = document.getElementById('video');
- var canvasObj = document.getElementById('canvas1');
- var context1 = canvasObj.getContext('2d');
- context1.fillStyle = "#ffffff";
- context1.fillRect(0, 0, 320, 240);
- context1.drawImage(videoElement, 0, 0, 320, 240);
- //alert("PaiZhaoSuccess");
- }
3.上傳到服務(wù)器
上傳到服務(wù)器還是用的老辦法,把圖片轉(zhuǎn)為base64,通過(guò)ajax,毫無(wú)新意的保存到了服務(wù)器上。(需要注意的是,HTML5中toDataURL方法是轉(zhuǎn)為的PNG格式,發(fā)送到服務(wù)端后會(huì)很大一張:320*240的照片要190kb,所以需要在服務(wù)器端轉(zhuǎn)格式為jpg,變?yōu)?0kb一張。詳情見(jiàn)demo)
- function uploadPhoto()//上傳拍照的圖片
- {
- showImgCode();
- request = createRequest();
- if (request == null) {
- alert("Unable to create request");
- }
- else {
- //alert("request.OK");
- var base64Data = document.getElementById('textB64').value.replace(/\+/g, "%2B"); //對(duì)參數(shù)中的+號(hào)編碼,防止丟失
- var url = "AJAX/UploadPic.aspx";
- request.open("POST", url, true);
- request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
- request.onreadystatechange = responses;
- request.send("&img=" + base64Data);
- //alert("send.OK");
- }
- }
- function responses() {
- if (request.readyState == 4)//服務(wù)器處理結(jié)束
- {
- if (request.status == 200)//一切正常
- {
- if (request.responseText == "OK") {
- alert("上傳成功!");
- }
- else {
- alert("上傳失??!");
- alert(request.responseText);
- }
- }
- }
- }
事實(shí)上,通過(guò)Html5的其他一些方法,甚至可以做出在線PS的功能,不過(guò)這些不在我的需求之內(nèi),現(xiàn)在也就不深入研究了。
好了,就這么多,更詳細(xì)的內(nèi)容見(jiàn)DEMO中代碼:Download
網(wǎng)站欄目:HTML5在線攝像頭應(yīng)用
URL分享:http://fisionsoft.com.cn/article/ccecjph.html


咨詢
建站咨詢
