溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何實(shí)現(xiàn)HTML 5在線攝像頭應(yīng)用

發(fā)布時(shí)間:2021-11-17 15:52:06 來(lái)源:億速云 閱讀:197 作者:柒染 欄目:web開(kāi)發(fā)

如何實(shí)現(xiàn)HTML 5在線攝像頭應(yīng)用,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

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

暫且不論本人從沒(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的在線攝像頭。

首先看效果

如何實(shí)現(xiàn)HTML 5在線攝像頭應(yīng)用

Html5大家也漸漸的不那么陌生了,至少也得知道只有少數(shù)瀏覽器能很好的兼容HTML5吧。所以測(cè)試環(huán)境是Chrome 18以上版本,并且在測(cè)試前應(yīng)開(kāi)啟瀏覽器的MediaStream:在地址欄輸入about:flags,啟用MediaStream。

如何實(shí)現(xiàn)HTML 5在線攝像頭應(yīng)用

然后就可以開(kāi)始敲代碼了。

不過(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獲得用戶的攝像頭視頻流。

<video id="video" autoplay="" width="320px" height="240px"></video>                 <script type="text/javascript">             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");              }          </script>

這樣,運(yùn)行以后便可以直接在網(wǎng)頁(yè)中調(diào)用攝像頭了。運(yùn)行后會(huì)提示

如何實(shí)現(xiàn)HTML 5在線攝像頭應(yīng)用

2、  拍照

用Canvas捕獲Video標(biāo)簽的內(nèi)容并顯示,就做到了拍照的效果。

同樣先添加一個(gè)canvas標(biāo)簽和一個(gè)button按鈕

<canvas id="canvas1" width="320" height="240"></canvas>

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)在也就不深入研究了。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI