切换摄像头操作(前置、后置)

一、默认进入页面后直接加载并调用摄像头

//调用摄像头的方法
 function takePhoto() {
            if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
                //调用用户媒体设备, 访问摄像头
                getUserMedia({
                    video: {
                        width: 100,
                        height: 100,
                        facingMode: environment   //设置使用后置摄像头,user为前置摄像头
                    }
                }, success, error);
                $("#showImg").hide();//隐藏拍照结果显示框
                $("#video").show();//开启拍照框
            } else {
                alert('不支持访问用户媒体');
            }
        }
        //直接调用方法,实现页面加载完就自动打开摄像头
        takePhoto();    

二、切换摄像头(前置、后置)

//设置一个按钮,并编写事件方法,触发切换摄像头操作
<label title="切换摄像头" class="btn btn-danger" id='takeAgain'>切换摄像头</label>

//切换摄像头的方法(重点:首先声明一个变量,存储摄像头前置、后置参数,再用一个三目运算方法来交换前置、后置参数,最后通过绑定事件来执行这个交换的操作,这样摄像头切换就基本完成了。)

 //访问用户媒体设备的兼容方法
        function getUserMedia(constraints, success, error) {
            if (navigator.mediaDevices.getUserMedia) {
                //最新的标准API
                navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
            } else if (navigator.webkitGetUserMedia) {
                //webkit核心浏览器
                navigator.webkitGetUserMedia(constraints, success, error)
            } else if (navigator.mozGetUserMedia) {
                //firfox浏览器
                navigator.mozGetUserMedia(constraints, success, error);
            } else if (navigator.getUserMedia) {
                //旧版API
                navigator.getUserMedia(constraints, success, error);
            }
        }
        let video = document.getElementById('video');
        let canvas = document.getElementById('canvas');
        let context = canvas.getContext('2d');
        var mediaStreamTrack;
         //默认后置摄像头
        var mode = 'environment';
        function success(stream) {
            //兼容webkit核心浏览器
            let CompatibleURL = window.URL || window.webkitURL;
            //将视频流设置为video元素的源
            mediaStreamTrack = stream.getTracks()[0];
            //video.src = CompatibleURL.createObjectURL(stream);
            video.srcObject = stream;
            video.play();
        }
        function error(error) {
            alert('访问用户媒体设备失败,请尝试更换浏览器')
        }
        document.getElementById('capture').addEventListener('click', function () {
            context.drawImage(video, 0, 0, 300, 300);
            mediaStreamTrack && mediaStreamTrack.stop();
            $('#tailoringImg').cropper('replace', canvas.toDataURL("image/png"), false);//默认false,适应高度,不失真
            $("#video").hide();//隐藏拍照框
            $("#showImg").show()//将拍照结果显示
        })
       //请求切换前后置摄像头
        $("#takeAgain").bind("click", function () {
            changeMode();
        });
        // 切换摄像头
        function changeMode() {
            mode = mode === 'user' ? 'environment' : 'user';
            mediaStreamTrack.stop();
            takePhoto();
        }
        //请求摄像头
        function takePhoto() {
            if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
                //调用用户媒体设备, 访问摄像头
                getUserMedia({
                    video: {
                        width: 100,
                        height: 100,
                        facingMode: mode  //设置使用后置摄像头,user为前置摄像头
                    }
                }, success, error);
                $("#showImg").hide();//隐藏拍照结果显示框
                $("#video").show();//开启拍照框
            } else {
                alert('不支持访问用户媒体');
            }
        }
        //直接调用方法,实现页面加载完就自动打开摄像头
        takePhoto();

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Android应用程序中,要实现切换摄像头的功能,可以使用Camera类或者Camera2类。这里提供使用Camera类实现切换摄像头的方法: 1.获取Camera对象 使用Camera.open()方法获取Camera对象,该方法可以获取到后置摄像头前置摄像头的Camera对象。 2.设置摄像头参数 使用Camera.setParameters()方法设置摄像头参数,例如设置摄像头分辨率、对焦模式等。 3.设置预览画面 使用Camera.setPreviewDisplay()方法设置预览画面的显示控件。 4.切换摄像头 使用Camera.stopPreview()方法停止预览,然后使用Camera.release()方法释放Camera对象资源,在重新获取Camera对象,再一次设置摄像头参数和预览画面,就可以实现切换摄像头的功能。 以下是参考代码: ```java private Camera mCamera; private int mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; // 后置摄像头 // 获取Camera对象 private void openCamera() { try { mCamera = Camera.open(mCameraId); } catch (Exception e) { e.printStackTrace(); } } // 切换摄像头 private void switchCamera() { mCamera.stopPreview(); mCamera.release(); if (mCameraId == Camera.CameraInfo.CAMERA_FACING_BACK) { mCameraId = Camera.CameraInfo.CAMERA_FACING_FRONT; // 前置摄像头 } else { mCameraId = Camera.CameraInfo.CAMERA_FACING_BACK; // 后置摄像头 } openCamera(); setCameraParameters(); setPreviewDisplay(); mCamera.startPreview(); } // 设置摄像头参数 private void setCameraParameters() { Camera.Parameters parameters = mCamera.getParameters(); // 设置摄像头分辨率等参数 mCamera.setParameters(parameters); } // 设置预览画面 private void setPreviewDisplay() { mCamera.setPreviewDisplay(mSurfaceView.getHolder()); } ``` 注:以上代码仅供参考,具体实现可以根据自己的需求进行调整。同时,需要注意摄像头的访问权限,需要在AndroidManifest.xml文件中添加相应的权限声明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值