九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何使用HTML5實(shí)現(xiàn)利用攝像頭拍照上傳功能

(為便于閱讀,對原文進(jìn)行了不失原意的適當(dāng)修改,包括代碼中一些錯(cuò)誤的重復(fù),并作了注釋)

  HTML5技術(shù)支持WebApp在手機(jī)上拍照,顯示在頁面上并上傳到服務(wù)器。這是手機(jī)微博應(yīng)用中常見的功能,當(dāng)然你也可以在其它類型應(yīng)用中適當(dāng)使用此技術(shù)。

  1、 視頻流

  HTML5 的 The Media Capture(媒體捕捉) API 提供了對攝像頭的可編程訪問,用戶可以直接用 getUserMedia(請注意目前僅Chrome和Opera支持)獲得攝像頭提供的視頻流。我們需要做的是添加一個(gè)HTML5 的 Video 標(biāo)簽,并將從攝像頭獲得的視頻作為這個(gè)標(biāo)簽的輸入來源。

  • <video id=”video” autoplay=”"></video>
  • <script>
  • var video_element=document.getElementById(‘video’);
  • if(navigator.getUserMedia){ // opera應(yīng)使用opera.getUserMedianow
  •       navigator.getUserMedia(‘video’,success,error);  //success是回調(diào)函數(shù),當(dāng)然你也可以直接在此寫一個(gè)匿名函數(shù)
  • }
  • function success(stream){
  •      video_element.src=stream;
  • }
  • </script>
    此時(shí),video 標(biāo)簽內(nèi)將顯示動(dòng)態(tài)的攝像視頻流。下面需要進(jìn)行拍照了。

  2、 拍照

  拍照是采用HTML5的Canvas功能,實(shí)時(shí)捕獲Video標(biāo)簽的內(nèi)容,因?yàn)閂ideo元素可以作為Canvas圖像的輸入,所以這一點(diǎn)很好實(shí)現(xiàn)。主要代碼如下:


  • var canvas=document.createElement(‘canvas’); //動(dòng)態(tài)創(chuàng)建畫布對象
  • var ctx=canvas.getContext(’2d’);
  • var cw=vw,ch=vh;
  • ctx.fillStyle=”#ffffff”;
  • ctx.fillRect(0,0,cw,ch);
  • ctx.drawImage(video_element,0,0,cw,ch,0,0,vw,vh); //將video對象內(nèi)指定的區(qū)域捕捉繪制到畫布上指定的區(qū)域,可進(jìn)行不等大不等位的繪制。
  • document.body.append(canvas);

  3、 圖片獲取

  從Canvas獲取圖片數(shù)據(jù)的核心思路是用canvas的toDataURL將Canvas的數(shù)據(jù)轉(zhuǎn)換為base64位編碼的PNG圖像,類似于“data:image/png;base64,xxxxx”的格式。

  • var imgData=canvas.toDataURL(“image/png”);

    這樣,imgData變量就存儲(chǔ)了一長串的字符數(shù)據(jù)內(nèi)容,表示的就是一個(gè)PNG圖像的base64編碼。因?yàn)檎嬲膱D像數(shù)據(jù)是base64編碼逗號(hào)之后的部分,所以要讓實(shí)際服務(wù)器接收的圖像數(shù)據(jù)應(yīng)該是這部分,我們可以用兩種辦法來獲取。

  第一種:是在前端截取22位以后的字符串作為圖像數(shù)據(jù),例如:

  • var data=imgData.substr(22);

  如果要在上傳前獲取圖片的大小,可以使用:

  • var length=atob(data).length; //atob 可解碼用base-64解碼的字串

  第二種:是在后端獲取傳輸?shù)臄?shù)據(jù)后用后臺(tái)語言截取22位以后的字符串(也就是在前臺(tái)略過上面這步直接上傳)。例如PHP里:

  • $image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);

  4、 圖片上傳

  在前端可以使用Ajax將上面獲得的圖片數(shù)據(jù)上傳到后臺(tái)腳本。例如使用jQuery時(shí)可以用:

  • $.post(‘upload.php’,{‘data’:data});

在后臺(tái)我們用PHP腳本接收數(shù)據(jù)并存儲(chǔ)為圖片。

  • function convert_data($data){
  •      $image=base64_decode(str_replace(‘data:image/jpeg;base64,’,”,$data);
  •      save_to_file($image);
  • }
  • function save_to_file($image){
  •     $fp=fopen($filename,’w');
  •     fwrite($fp,$image);
  •     fclose($fp);
  • }

  以上的解決方案不僅能用于Web App拍照上傳,也可以通過Canvas的編輯功能函數(shù)提供圖片編輯,例如裁剪、上色、涂鴉、圈點(diǎn)等功能,然后把用戶編輯完的圖片上傳保存到服務(wù)器上。

  在還在不斷補(bǔ)充修正的HTML5的驅(qū)動(dòng)下,Web App與Native App之間的距離將越來越小。在可預(yù)見的不遠(yuǎn)的未來,越來越多老的和新的開發(fā)項(xiàng)目必將會(huì)遷移到WEB應(yīng)用上來。

相關(guān)規(guī)范:

The MediaCapture API:http://www.w3.org/TR/media-capture-api/

Canvas:http://dev.w3.org/html5/2dcontext/

 

本文轉(zhuǎn)自:http://h5dev.uc.cn/thread-14-1-1.html 并進(jìn)行了排版和內(nèi)容上的一些適當(dāng)修改。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
html5調(diào)用手機(jī)攝像頭,實(shí)現(xiàn)拍照上傳功能 | 攻略網(wǎng)
canvas
深入研究HTML5實(shí)現(xiàn)圖片壓縮上傳功能
LayaAir首頁、文檔和下載
前臺(tái)JS 實(shí)現(xiàn)截圖保存功能
HTML 5 Canvas(畫布)教程之圖像處理
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服