pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

AngularJS中使用HTML5攝像頭拍照

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

 

  1. 項目背景

 

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

 

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

 

  2. 如何調用攝像頭

$scope.photoErr = false;
$scope.photoBtnDiable = true;
var mediaStream = null,track = null;

navigator.getMedia = (navigator.getUserMedia ||
                      navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||
                      navigator.msGetUserMedia);
        if (navigator.getMedia) {
            navigator.getMedia(
           {
               video: true
           },
           // successCallback
           function (stream) {
               var s = window.URL.createObjectURL(stream);
               var video = document.getElementById('video');
               video.src = window.URL.createObjectURL(stream);
               mediaStream = stream;
               track = stream.getTracks()[0];
               $scope.photoBtnDiable = false;               $scope.$apply();
           },
           // errorCallback
           function (err) {
               $scope.errorPhoto();
               console.log("The following error occured:" + err);
           });
              } else {
            $scope.errorPhoto();
        }

  代碼解析:

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

{
      video: true,
      audio: true
}

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

 

  3. 拍照

$scope.snap = function () {
        var canvas = document.createElement('canvas');
            canvas.width = "400";
            canvas.height = "304";

            var ctx = canvas.getContext('2d');
            ctx.drawImage(video, 0, 0, 400, 304);
            $scope.closeCamera();
            $uibModalInstance.close(canvas.toDataURL("image/png"));
};

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

 

  4. 如何關閉攝像頭

$scope.closeCamera = function () {
            if (mediaStream != null) {
                if (mediaStream.stop) {
                    mediaStream.stop();
                }
                $scope.videosrc = "";
            }
            if (track != null) {
                if (track.stop) {
                    track.stop();
                }
            }
        }

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

 

  5. 集成到AndularJs

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

  service注冊:

app().registerService("h5TakePhotoService", function ($q, $uibModal) {

        this.photo = function () {
            var deferred = $q.defer();
            require([config.server + "/com/controllers/photo.js"], function () {
                $uibModal.open({
                    templateUrl: config.server + "/com/views/modal_take_photo.html",
                    controller: "photoModalController",
                    windowClass: "modal-photo"
                }).result.then(function (e) {
                    deferred.resolve(e);
                });
            });
            return deferred.promise;
        }

    });


  調用方式:

$scope.takePhoto = function () {
      h5TakePhotoService.photo().then(function (res) {
           if (res != null && res != "") {
               $scope.myImage = res;
           }
      });
}

  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

   作者:碼農網 – 楊勇

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

由于實際運行環境是在瀏覽器中,因此性能還取決于JavaScript解釋器的效率,指定的FPS幀速在低性能解釋器中可能不會達到,所以這部分不是開發者能夠決定的,開發者能作的是盡可能通
本文將使用HTML5提供的VideoAPI做一個自定義的視頻播放器,需要用到HTML5提供的video標簽、以及HTML5提供的對JavascriptAPI的擴展。,HTML5中國,中國最大的HTML5中文門戶。
隨著 Hybrid 應用的豐富,HTML5 工程師們已經不滿足于把桌面端體驗簡單移植到移動端,他們覬覦移動原生應用人性化的操作體驗,特別是原生應用與生俱來的豐富的手勢系統。HTML5 沒有提
你想要在自己網站上分享一個產品,或者是一個作品集,又或者僅僅只是一個靈感。在你發布到網上之前,你想讓它看起來有吸引力,專業,或者至少得看起來像那么回事。那么你接下
H5廣告,包括H5廣告的設計流程,究竟有什么講究,和階段。為了能幫助更多的人了解H5廣告,我專門做了一個講義。同時,也讓我意外的收到了非常好反饋和認!這是對我的極大鼓勵!我的
本文主要內容有:框架與組件、構建生態、開發技巧與調試、html、css與重構、native/hybrid/桌面開發、前端/H5優化、全棧/全端開發、研究實驗、數據分析與監控、其它軟技能、前端技術網
主站蜘蛛池模板: 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 5nd音乐网|最新流行歌曲|MP3歌曲免费下载|好听的歌|音乐下载 免费听mp3音乐 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 北京租车牌|京牌指标租赁|小客车指标出租 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 创绿家招商加盟网-除甲醛加盟-甲醛治理加盟-室内除甲醛加盟-创绿家招商官网 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 哈尔滨京科脑康神经内科医院-哈尔滨治疗头痛医院-哈尔滨治疗癫痫康复医院 | 青岛侦探调查_青岛侦探事务所_青岛调查事务所_青岛婚外情取证-青岛狄仁杰国际侦探公司 | HDPE土工膜,复合土工膜,防渗膜价格,土工膜厂家-山东新路通工程材料有限公司 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 定坤静电科技静电消除器厂家-除静电设备 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | EPK超声波测厚仪,德国EPK测厚仪维修-上海树信仪器仪表有限公司 | 我爱古诗词_古诗词名句赏析学习平台 | 消泡剂_水处理消泡剂_切削液消泡剂_涂料消泡剂_有机硅消泡剂_广州中万新材料生产厂家 | 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 金库门,金库房,金库门厂家,金库门价格-河北特旺柜业有限公司 | 北京征地律师,征地拆迁律师,专业拆迁律师,北京拆迁律师,征地纠纷律师,征地诉讼律师,征地拆迁补偿,拆迁律师 - 北京凯诺律师事务所 | 东莞ERP软件_广州云ERP_中山ERP_台湾工厂erp系统-广东顺景软件科技有限公司 | 西安文都考研官网_西安考研辅导班_考研培训机构_西安在职考研培训 |