国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

AngularJS中使用HTML5攝像頭拍照

開發 前端
需要說一下,測試時只能通過http://url訪問才能使用,不能通過file://url方式訪問,即我們需要將代碼部署才能訪問,可以在Visual Studio、 java web、php中完成。

1. 項目背景

公司開發一個網站,在做用戶頭像修改的時候領導提到增加一個由攝像頭拍照實現修改頭像的功能。因為我們網站是基于Html5進行開發,所以就直接采用H5來實現拍照。起初覺得這個功能很簡單,但是做的時候才發現并不是那么簡單的。

 

[[162990]]

這是在AngularJs中成功實現調用攝像頭拍照并截圖上傳的例圖:

 

 

2. 如何調用攝像頭

  1. $scope.photoErr = false
  2. $scope.photoBtnDiable = true
  3. var mediaStream = null,track = null
  4.  
  5. navigator.getMedia = (navigator.getUserMedia || 
  6.                       navigator.webkitGetUserMedia || navigator.mozGetUserMedia || 
  7.                       navigator.msGetUserMedia); 
  8.         if (navigator.getMedia) { 
  9.             navigator.getMedia( 
  10.            { 
  11.                video: true 
  12.            }, 
  13.            // successCallback 
  14.            function (stream) { 
  15.                var s = window.URL.createObjectURL(stream); 
  16.                var video = document.getElementById('video'); 
  17.                video.src = window.URL.createObjectURL(stream); 
  18.                mediaStream = stream; 
  19.                track = stream.getTracks()[0]; 
  20.                $scope.photoBtnDiable = false;               $scope.$apply(); 
  21.            }, 
  22.            // errorCallback 
  23.            function (err) { 
  24.                $scope.errorPhoto(); 
  25.                console.log("The following error occured:" + err); 
  26.            }); 
  27.               } else { 
  28.             $scope.errorPhoto(); 
  29.         } 

代碼解析:

navigator為瀏覽器對象,包含瀏覽器的信息,這里就是用這個對象打開攝像頭。$scope為AndularJs語法。***步聲明 navigator.getMedia來調用瀏覽器不同的打開攝像頭函數,目前僅有getUserMedia、webkitGetUserMedia、 mozGetUserMedia、msGetUserMedia四種方式分別對應通用瀏覽器、Google瀏覽器、火狐瀏覽器和IE瀏覽器,瀏覽器會自動 判斷調用哪一個函數。第二步是調用打開瀏覽器,包含三個參數,分別為需要使用的多媒體類型、獲取成功返回的流數據處理函數以及操作失敗返回錯誤消息處理函 數。其中,使用時不僅可以設置視頻還能設置使用麥克風,設置方式為:

  1.       video: true, 
  2.       audio: true 

調用成功即打開攝像頭后返回視頻流數據,我們可以將流數據設置到video標簽在界面上實時顯示圖像。mediaStream用來記錄獲取到的流數據,track在Chrome瀏覽器中用來跟蹤攝像頭狀態,這兩個變量都能用來關閉攝像頭。

3. 拍照

  1. $scope.snap = function () { 
  2.         var canvas = document.createElement('canvas'); 
  3.             canvas.width = "400"
  4.             canvas.height = "304"
  5.  
  6.             var ctx = canvas.getContext('2d'); 
  7.             ctx.drawImage(video, 00400304); 
  8.             $scope.closeCamera(); 
  9.             $uibModalInstance.close(canvas.toDataURL("image/png")); 
  10. }; 

拍照時需要使用到canvas標簽,創建一個canvas標簽,設置我們需要拍照的尺寸大小,通過drawImage函數將video當前的圖像保 存到canvas標簽,***將圖像數據轉換為base64數據返回并關閉攝像頭,這樣就完成了我們的拍照功能。這里的$uibModalInstance 對象是我們項目中打開彈出層的一個對象,用來控制彈出層的顯示。

4. 如何關閉攝像頭

  1. $scope.closeCamera = function () { 
  2.             if (mediaStream != null) { 
  3.                 if (mediaStream.stop) { 
  4.                     mediaStream.stop(); 
  5.                 } 
  6.                 $scope.videosrc = ""
  7.             } 
  8.             if (track != null) { 
  9.                 if (track.stop) { 
  10.                     track.stop(); 
  11.                 } 
  12.             } 
  13.         } 

正如前面所說,關閉攝像頭的方式是通過mediaStream和track變量,只不過,track只能關閉Chrome瀏覽器中的攝像頭,這也是Chrome 45版本以上關閉攝像頭的方式。

5. 集成到AndularJs

事實上,前面所說的都是在AndularJs中實現的,當然,這里只是實現了拍照并返回拍照數據,我們想要在其他地方也使用,就需要將這部分獨立出 來,這里我們用到了AngularJs中的service機制,將這部分單獨做成一個service并在項目中注入,然后就可以在其他地方調用了。

 

  1. service注冊: 
  2.  
  3. app().registerService("h5TakePhotoService", function ($q, $uibModal) { 
  4.  
  5.         this.photo = function () { 
  6.             var deferred = $q.defer(); 
  7.             require([config.server + "/com/controllers/photo.js"], function () { 
  8.                 $uibModal.open({ 
  9.                     templateUrl: config.server + "/com/views/modal_take_photo.html"
  10.                     controller: "photoModalController"
  11.                     windowClass: "modal-photo" 
  12.                 }).result.then(function (e) { 
  13.                     deferred.resolve(e); 
  14.                 }); 
  15.             }); 
  16.             return deferred.promise; 
  17.         } 
  18.  
  19.     }); 

調用方式:

  1. $scope.takePhoto = function () { 
  2.       h5TakePhotoService.photo().then(function (res) { 
  3.            if (res != null && res != "") { 
  4.                $scope.myImage = res; 
  5.            } 
  6.       }); 

h5TakePhotoService為控制器中注入的拍照service對象,***處理返回的圖像數據,設置數據顯示到界面上。

6. 兼容問題

主要存在Chrome瀏覽器中,本地測試時,Chrome瀏覽器中能夠正常使用,但是部署到服務器后就不能正常使用,報錯消息 為 [object NavigatorUserMediaError],這是因為Chrome瀏覽器在使用攝像頭時只支持安全源訪問,所以只能通過 https訪問才能正常使用。

***需要說一下,測試時只能通過http://url訪問才能使用,不能通過file://url方式訪問,即我們需要將代碼部署才能訪問,可以在Visual Studio、 java web、php中完成。

 

 

 

本文鏈接:http://www.codeceo.com/article/angularjs-html5-take-photo.html

 

責任編輯:王雪燕 來源: 碼農網
相關推薦

2012-06-23 20:13:44

HTML5

2023-03-22 09:05:48

Linux舊相機網絡攝像頭

2009-08-21 17:11:05

C#攝像頭

2012-05-18 15:10:22

HTML5

2023-02-26 22:06:22

Electron瀏覽器開發

2020-06-04 10:59:10

JavaScript開發技術

2021-03-11 10:21:55

特斯拉黑客網絡攻擊

2013-03-21 09:56:09

2024-11-29 16:51:18

2017-06-20 11:45:52

2011-04-25 09:16:10

Windows 8

2013-01-18 10:59:44

IBMdW

2009-06-17 11:52:01

Linux

2009-08-21 17:24:18

C#控制攝像頭

2011-09-08 13:53:20

Linux攝像頭

2011-05-12 09:01:29

HTML5

2016-12-28 07:41:46

科技新聞早報

2012-05-03 08:08:34

Linux攝像頭

2018-06-20 11:54:54

2011-09-13 15:51:11

PhoneGap AP
點贊
收藏

51CTO技術棧公眾號

国产伦精品一区二区三区视频免费| 亚洲国内高清视频| 韩国福利视频一区| 亚洲无吗一区二区三区| 久久福利综合| 在线观看久久久久久| 性xxxfreexxxx性欧美| 亚洲成在人线免费| 特黄特黄的视频| 亚洲少妇屁股交4| 男男互摸gay网站| 中文字幕二三区不卡| 青青青在线播放| 91丨porny丨中文| 欧美四级电影网| 在线观看免费成人av| 影音先锋欧美激情| 狠狠躁18三区二区一区| japanese在线播放| 欧美日韩三级电影在线| 一区二区亚洲精品国产| 黄色污网站在线观看| 日韩欧美第一区| а√在线中文网新版地址在线| 日韩三级视频在线看| 午夜小视频在线观看| 亚洲成色999久久网站| 国产区美女在线| 亚洲男人天堂古典| 在线观看网站免费入口在线观看国内 | 日韩wuma| 老司机精品视频在线| 黄色一级片网址| 成人国产电影网| 99在线免费观看| 欧美性猛交xxxx黑人猛交| 午夜免费福利在线观看| 91精品国产91久久综合桃花| 宅男在线观看免费高清网站| 亚洲丁香婷深爱综合| 欧美特大特白屁股xxxx| 久久精品99久久久香蕉| 国产美女撒尿一区二区| 国产精品一区二区久久| 亚洲久久一区二区| 午夜啪啪福利视频| 国产女主播视频一区二区| 男女羞羞视频网站| 欧美视频自拍偷拍| 丝袜老师在线| 久久久久久成人| 亚洲欧美一区在线| 国产精品免费看久久久无码| 最新日韩av在线| 成人在线app| 久久天天躁狠狠躁夜夜躁2014 | 亚洲欧美日韩一区二区三区在线| 成人激情久久| 91免费国产网站| 国产一区不卡在线| 欧美福利网站| 精品捆绑美女sm三区| 成人永久在线| 国产99在线播放| 久久综合九色综合欧美亚洲| 国产精品ⅴa有声小说| 亚洲精品短视频| 图片婷婷一区| 天天人人精品| 国产精品国产三级国产三级人妇| 在线激情小视频| 欧美黑人视频一区| 亚洲一区黄色| xxxx影院| 亚洲人精选亚洲人成在线| 日韩激情毛片| 日本免费黄色小视频 | 国外av网站| 亚洲第一区第一页| 久久99视频| 在线视频一二三区| 日韩欧美a级成人黄色| 在线欧美激情| 日本成人三级| 亚洲线精品一区二区三区八戒| 欧美动物xxx| 国产一区二区无遮挡| 日本一区二区三区国色天香| 暖暖在线中文免费日本| 日本亚洲欧洲色| 成人激情校园春色| 欧美亚洲系列| 国产精品日韩一区二区三区| 亚洲欧美在线另类| 日本电影久久久| 一区二区在线观看网站| 色婷婷av一区| jizzjizz欧美69巨大| 粉嫩虎白女毛片人体| 精品久久久久av影院| 自由日本语亚洲人高潮| 999www成人| 久久综合伊人77777| 青青草国产精品亚洲专区无| 最近中文字幕在线中文视频 | 91日本在线观看| 国产精品成人一区二区艾草 | 欧美变态凌虐bdsm| 欧美一区二区三区久久精品茉莉花| 免费一级特黄录像| 日韩精品免费视频| 99精品视频免费| 香蒸焦蕉伊在线| 国产va免费精品高清在线| av欧美精品.com| 啦啦啦中文在线观看日本| 91久久极品少妇xxxxⅹ软件 | 日本大胆欧美| 亚洲一级片网站| 蜜臀久久99精品久久久久久宅男 | 亚洲18女电影在线观看| 网站一区二区| 一级黄色香蕉视频| 欧美高跟鞋交xxxxhd| 成人三级在线视频| 成人小电影网站| 亚洲欧美在线网| 欧美刺激午夜性久久久久久久| 欧美日韩成人| av一本在线| 久久av一区二区三区漫画| 日本高清不卡在线观看| 91成人国产| 成人在线视频成人| 久久96国产精品久久99软件| 色天使色偷偷av一区二区| 欧美国产小视频| 日韩美女一级视频| 91色视频在线导航| 欧美在线观看一区| 豆花视频一区二区| 精品久久97| 成人国产精品久久久| 日韩电影免费观看高清完整版在线观看| 久久精品二区| 欧美一区二区三区视频在线观看 | 精品无码久久久久久国产| 丝袜美腿亚洲色图| 草草在线观看| 久久久久久久午夜| 国产做受高潮69| 性做久久久久久| 亚洲亚洲精品三区日韩精品在线视频| 亚洲精品国产免费| 久久亚区不卡日本| av亚洲在线观看| 成人动漫在线播放| 中文字幕精品一区日韩| 日韩在线免费视频| 中文字幕亚洲区| 色综合咪咪久久网| 精品国产aⅴ麻豆| 人人妻人人做人人爽| 欧美激情国产精品日韩| 午夜精品一区二区三区在线观看 | 麻豆视频一区二区| 久久夜夜操妹子| www.99在线| 亚洲精品女av网站| 精品亚洲一区二区三区| 国产片一区二区| 99久久99热这里只有精品| 欧美被日视频| 国产欧美日韩小视频| 4438全国成人免费| 欧美一区二区私人影院日本| 国产精品亚洲专一区二区三区| 视频二区欧美毛片免费观看| 在线看三级网站视频| 日韩av一区二区三区在线| 久久综合88中文色鬼| 亚洲国产一区二区三区 | 91精品在线影院| 精品国产免费人成电影在线观看四季| av在线播放一区二区三区| 国内成人精品| 中国色在线日|韩| 精东影业在线观看| 亚洲视频sss| 欧美国产精品va在线观看| 欧美伊人久久久久久久久影院| 国产69精品久久777的优势| 国产剧情在线观看一区| 国产蜜臀在线| 黄色资源在线看| 激情图片qvod| 国产精品嫩草在线观看| 欧美高清第一页| 精品国产免费一区二区三区四区| 亚洲欧美国产三级|