所有分类
  • 所有分类
  • 后端开发
html5换头像,摄像头调用大揭秘

html5换头像,摄像头调用大揭秘

公司开发一个网站,在做用户头像修改的时候领导提到增加一个由摄像头拍照实现修改头像的功能。这是在AngularJs中成功实现调用摄像头拍照并截图上传的例图:navigator为浏览器对象,包含浏览器的信息,这里就是用这个对象打开摄像头。45版

1.项目背景

老板脑洞大开,想让我们的网站也能像微信那样换头像,大家自信满满地说html5就能搞定。可真干起来发现,这活儿不好对付,有点棘手。

html5换头像,摄像头调用大揭秘

2.如何调用摄像头

html5换头像,摄像头调用大揭秘

学习如何用AngularJS的$scope调用摄像头?so easy!接着让navigator这个“导游”带我们启动浏览器的相机通道!有四个选择哦——getUserMedia、webkitGetUserMedia、mozGetUserMedia和msGetUserMedia,对应各大浏览器。搞定之后,把视频流数据扔给video标签,就可以看到实时画面了~

html5换头像,摄像头调用大揭秘

想用摄像头?记住这三个要点就行了:多媒体类型知道不?拿到数据怎么操作?遇到问题该咋办?学会这些,让你不仅能看视频,还能录音录像!一切顺利的话,摄像头打开会给你返回视频流数据,放到video标签上,实时画面马上就能看到

$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();
        }

3.拍照

小伙伴们拍照片得依靠Canvas这个厉害标签。首先,咱得准备个Canvas标签,设置好要拍多大的照片。再把现场录制的视频截图保存在Canvas上,最后将图片变为本地Base64格式,这样手机摄像头就可以下岗。

看看这效率多高!之后,咱们再来说说$uibModalInstance。这可不是个小角色,在项目里是负责跳出窗口展示功能的!

4.如何关闭摄像头

{
      video: true,
      audio: true
}

想让摄像头停止工作?Chrome浏览器上的mediaStream和track帮了大忙!不过记住只有Chrome才能用这招关闭摄像头;其他浏览器就得换个办法了。像Chrome 45及以后的版本还有好多新花样等你去探索哦~

5.集成到AngularJs

首先要说要是你想把老男孩拍的照片用在别处,那就先把它取出来!这个不难喔~只需要用AngularJS的service功能弄成一个服务,然后加到项目里就行了。以后无论在哪里,都可以轻易地使用这个功能!

$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"));
};

装上拍照服务后,就可以放回我们平时用的h5TakePhotoService控制器中了。接下来,就是处理这些服务发过来的照片数据,最后再把它们展示出来给你们看!

6.兼容问题

Chrome这玩意儿在兼容性上实在让人头痛,网页浏览起来像断网似的,得等官方修好了才行。总的来说就是想用视野相机,Chrome得先拿到https图像数据才能用。

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

记住!要让这个东西动起来,得先上传到服务器,别想着随便一个file://url就能搞定。不管是Visual Studio还是Java Web、PHP什么平台都行,咱们就是绰绰有余。

原文链接:https://www.icz.com/technicalinformation/web/2024/04/14468.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?