整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          (親測(cè)可用)html5調(diào)用手機(jī)攝像頭

          切圖網(wǎng)一個(gè)客戶的webapp項(xiàng)目中需要用到 html5調(diào)用手機(jī)攝像頭,找了很多資料,大都是 js調(diào)用api 然后怎樣怎樣,做了幾個(gè)demo測(cè)試發(fā)現(xiàn)根本不行, 后來(lái)恍然大悟,用html5自帶的 input file="" ,純html5,并且不涉及到j(luò)s ,就可以實(shí)現(xiàn)。代碼如下:

          1. <input type="file" accept="image/*" capture="camera">

          2. <input type="file" accept="video/*" capture="camcorder">

          3. <input type="file" accept="audio/*" capture="microphone">

          capture表示,可以捕獲到系統(tǒng)默認(rèn)的設(shè)備,比如:camera--照相機(jī);camcorder--攝像機(jī);microphone--錄音。

          accept表示,直接打開(kāi)系統(tǒng)文件目錄。

          其實(shí)html5的input:file標(biāo)簽還支持一個(gè)multiple屬性,表示可以支持多選,如:

          1. <input type="file" accept="image/*" multiple>

          加上這個(gè)multiple后,capture就沒(méi)啥用了,因?yàn)閙ultiple是專門(mén)yong用來(lái)支持多選的。

          切圖社區(qū)(qietu.cn)原創(chuàng)。

          兩天發(fā)布了一篇關(guān)于利用html5在手機(jī)端進(jìn)行撥號(hào)和發(fā)送短信的教程,今天再說(shuō)一下利用html5在手機(jī)端調(diào)用攝像頭以及錄音的教程

          HTML5 調(diào)用手機(jī)攝像頭

          在html5中可以利用type類型為file的input的標(biāo)簽調(diào)起手機(jī)的攝像頭

          例:html5調(diào)用手機(jī)攝像頭進(jìn)行拍照

          <input type="file" accept="image/*" capture="camera"> 
          

          例:html5調(diào)用手機(jī)攝像頭進(jìn)行錄像

          <input type="file" accept="video/*" capture="camera">
          

          HTML5 進(jìn)行手機(jī)錄音

          input 標(biāo)簽,不僅僅可以調(diào)用起手機(jī)的攝像頭,還可以錄音呢

          例:

          <input type="file" accept="audio/*" capture="microphone">
          

          input代碼解析

          input accept 屬性

          accept屬性可以限制可用文件的類型,當(dāng) input 標(biāo)簽的 type 屬性為 file 時(shí),可以規(guī)定服務(wù)器所接受的文件類型

          例如:

          accept="audio/*" 表示所有音頻文件
          accept="video/*" 表示視頻文件
          accept="image/"* 表示圖片文件
          

          當(dāng)然你也可以使用文件后綴名的形式

          例:

          accept="image/png* 表示只接收后綴名為 png 的圖片
          accept="image/jpg* 表示只接收后綴名為 jpg 的圖片
          accept=".png, .jpg, .jpeg" 表示可以同時(shí)接收 png jpg jpeg 后綴的文件
          

          input capture 屬性

          著web功能越來(lái)越強(qiáng)大,我們很多時(shí)候需要在web頁(yè)面來(lái)獲取攝像頭進(jìn)行操作,原生html5提供了對(duì)攝像頭的支持,需要用戶的同意授權(quán),下面是一個(gè)基于 HTML5 的調(diào)用攝像頭拍照并上傳后臺(tái)的示例代碼:

          html復(fù)制代碼<!DOCTYPE html>
          <html>
          <head>
              <title>拍照上傳</title>
          </head>
          <body>
              <video id="video" style="width:300px;height:200px;"></video>
              <br>
              <button id="btn-start">啟動(dòng)攝像頭</button>
              <button id="btn-stop">停止攝像頭</button>
              <button id="btn-capture">拍照上傳</button>
              <br>
              <canvas id="canvas"></canvas>
              <form id="form-upload" method="post" enctype="multipart/form-data">
                  <input type="file" id="input-file" name="file"/>
              </form>
          
              <script type="text/javascript">
                  var video = document.getElementById('video');
                  var canvas = document.getElementById('canvas');
                  var ctx = canvas.getContext('2d');
                  
                  // 啟動(dòng)攝像頭
                  document.getElementById('btn-start').addEventListener('click', function() {
                      navigator.mediaDevices.getUserMedia({
                          video: true,
                          audio: false
                      }).then(function(stream) {
                          video.srcObject = stream;
                      }).catch(function(err) {
                          console.log("啟動(dòng)攝像頭失敗:" + err);
                      });
                  });
          
                  // 停止攝像頭
                  document.getElementById('btn-stop').addEventListener('click', function() {
                      video.pause();
                      video.srcObject.getTracks()[0].stop();
                      video.srcObject = null;
                  });
          
                  // 拍照,并上傳到后臺(tái)
                  document.getElementById('btn-capture').addEventListener('click', function() {
                      canvas.width = video.videoWidth;
                      canvas.height = video.videoHeight;
                      ctx.drawImage(video, 0, 0);
                      canvas.toBlob(function(blob) {
                          var formData = new FormData();
                          formData.append('file', blob, 'photo.jpg');
                          postRequest('/upload', formData, function(res) {
                              alert(res.message);
                          });
                      }, 'image/jpeg');
                  });
          
                  // 發(fā)送 POST 請(qǐng)求
                  function postRequest(url, data, callback) {
                      var xhr = new XMLHttpRequest();
                      xhr.open('POST', url, true);
                      xhr.onreadystatechange = function() {
                          if (xhr.readyState == 4 && xhr.status == 200) {
                              var res = JSON.parse(xhr.responseText);
                              callback(res);
                          }
                      };
                      xhr.send(data);
                  }
              </script>
          </body>
          </html>
          

          上述代碼主要分為以下幾個(gè)部分:

          1. html5 的 <video> 元素用于顯示攝像頭數(shù)據(jù)流,我們可以通過(guò) JavaScript API 控制調(diào)用攝像頭、暫停和關(guān)閉。同時(shí)使用了 <canvas> 元素來(lái)緩存視頻幀的圖像數(shù)據(jù)。
          2. 頁(yè)面中 btn-start 按鈕通過(guò) getUserMedia() 方法請(qǐng)求瀏覽器授權(quán),并將攝像頭數(shù)據(jù)流傳給 <video> 元素進(jìn)行播放。
          3. 點(diǎn)擊 btn-capture 按鈕時(shí),通過(guò) toBlob() 將緩存的圖像數(shù)據(jù)轉(zhuǎn)化為 Blob 對(duì)象,并封裝到 FormData 中,以便發(fā)送給后臺(tái)服務(wù)。
          4. postRequest() 函數(shù)用于發(fā)送包含文件數(shù)據(jù)的 POST 請(qǐng)求,其中 FormData 對(duì)象中的 key 是上傳后臺(tái)服務(wù)器處理時(shí)需要讀取的參數(shù)名稱,通常對(duì)應(yīng)具體的后臺(tái)業(yè)務(wù)邏輯。

          最后,需要注意的是,在本地調(diào)試和開(kāi)發(fā)時(shí),特別是在 Windows 操作系統(tǒng)下使用 Chrome 瀏覽器訪問(wèn)時(shí),可能會(huì)遇到攝像頭不能正常運(yùn)行的情況。這時(shí)可以打開(kāi)地址欄,在目標(biāo)請(qǐng)求前加上 --unsafely-treat-insecure-origin-as-secure="http://localhost:8080" 參數(shù)(其中端口號(hào)需替換成實(shí)際的本地服務(wù)端口),即可獲得權(quán)限,進(jìn)行攝像頭使用。


          主站蜘蛛池模板: 无码人妻精品一区二区三区99性| 国产色情一区二区三区在线播放| 国产一区二区三区福利| 精品少妇人妻AV一区二区| 激情内射亚州一区二区三区爱妻| 亚洲一区二区三区91| 手机看片福利一区二区三区| 国产女人乱人伦精品一区二区 | 色噜噜一区二区三区| 亚洲宅男精品一区在线观看| 国产成人一区二区三区在线| 高清在线一区二区| 国内精品一区二区三区最新| 日韩免费一区二区三区在线| 国产一区二区精品久久| 亚洲一区视频在线播放| 亚洲片一区二区三区| 国产伦精品一区二区免费| 精品在线视频一区| 一区二区三区视频在线播放| 激情爆乳一区二区三区| 色综合视频一区二区三区 | 视频在线一区二区三区| 日本v片免费一区二区三区| 国产视频一区二区| 精品3d动漫视频一区在线观看| 国产精品无码亚洲一区二区三区| 亚洲欧美日韩中文字幕一区二区三区| 国产精品视频一区二区三区经| 精品人妻一区二区三区浪潮在线| 无码精品尤物一区二区三区| 亚洲日韩中文字幕一区| 亚洲欧洲专线一区| 精品一区二区三区电影| V一区无码内射国产| 久久亚洲AV午夜福利精品一区| 78成人精品电影在线播放日韩精品电影一区亚洲 | 欧亚精品一区三区免费| 国产麻豆剧果冻传媒一区| 无码毛片一区二区三区视频免费播放 | 日韩精品一区二区午夜成人版|