Android 使用CameraX拍照,自动对焦,以及证件照剪切

在这里插入图片描述

想看更多算法题,可以扫描上方二维码关注我微信公众号“数据结构和算法”,截止到目前我已经在公众号中更新了500多道算法题,其中部分已经整理成了pdf文档,截止到目前总共有800多页(并且还会不断的增加),可以在公众号中回复关键字“pdf”即可下载。


在Android中拍照最初使用的是Camera,现在基本上已经被废弃了,然后就是Camera2,这个使用更灵活,但有一点复杂,然后就是CameraX了,这个使用起来更方便。我们先来看一下演示效果


在这里插入图片描述

他可以使用前置或者后置摄像头拍照,自动对焦,也可以实现证件照并实现剪切

使用方式


在根目录的buid.gradle文件中添加

	allprojects {
    
    
		repositories {
    
    
			...
			maven {
    
     url 'https://jitpack.io' }
		}
	}

然后在使用的module的buid.gradle中添加

  implementation 'com.github.sdwwld:CameraX:1.1.2'

使用方式很简单,几行代码即可

            new CameraParam.Builder()
                    .setActivity(this)
                    .build();

当然如果不能满足你的需求,还可以修改更多的属性

            String cameraPath = Environment.getExternalStorageDirectory().getPath() + File.separator + "DCIM" + File.separator + "Camera";
            File cameraFolder = new File(cameraPath);
            if (!cameraFolder.exists()) {
    
    
                cameraFolder.mkdirs();
            }
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");

            CameraParam mCameraParam =
                    new CameraParam.Builder()
                            .setActivity(this)//!!!参数必须要有
                            .setFront(false)//是否是前置摄像头,true是前置摄像头,false是后置摄像头
                            .setShowMask(true)//是否显示裁剪区,如果显示,图片会进行裁剪
                            .setShowSwitch(true)//是否显示摄像头切换按钮,如果显示,可以点击切换前后摄像头
                            .setSwitchLeft(Tools.dp2px(this, 40))//摄像头切换按钮到屏幕左边的距离
                            .setSwitchTop(Tools.dp2px(this, 40))//摄像头切换按钮到屏幕上边的距离
                            .setSwitchSize(Tools.dp2px(this, 40))//摄像头切换按钮的大小(宽高一样,是正方形的)
                            .setBackText("返回")//下面返回键显示的文字
                            .setBackColor(Color.WHITE)//下面返回键的颜色
                            .setBackSize(16)//下面返回键的尺寸
                            .setBackLeft(Tools.dp2px(this, 10))//返回键到屏幕左边的距离
                            .setTakePhotoSize(Tools.dp2px(this, 60))//拍照按钮的大小(还有拍照完之后显示的保存和放弃保存的按钮,这3个按钮的大小是一样的)
                            .setMaskMarginLeftAndRight(Tools.dp2px(this, 20))//如果显示裁剪框,裁剪框左右两边倒屏幕的距离
                            .setMaskMarginTop(Tools.dp2px(this, 120))如果显示裁剪框,裁剪框到屏幕上边的距离
                            .setMaskRatioW(8)//下面一行和当前行表示的是裁剪框的宽高比
                            .setMaskRatioH(5)
                            .setResultBottom(Tools.dp2px(this, 60))//拍照按钮到屏幕下边的距离(还有拍照完之后显示的保存和放弃保存的按钮)
                            .setResultLeftAndRight(Tools.dp2px(this, 60))//拍照完之后显示的保存和放弃保存的按钮到左边和右边的距离
                            .setSwitchImgId(R.drawable.ic_switch)//切换摄像头的按钮
                            .setMaskImgId(R.drawable.bg_bankcard)//剪切框
                            .setSaveImgId(R.mipmap.success)//拍照成功之后的保存按钮
                            .setCancelImgId(R.mipmap.failed)//拍照成功之后的放弃按钮
                            .setTakePhotoImgId(R.mipmap.take_button)//拍照按钮
                            .setPicturePath(cameraFolder.getAbsolutePath() + File.separator + "IMG_" + simpleDateFormat.format(new Date()) + ".jpg")//拍照保存的路径
                            .setShowFocusTips(true)//点击屏幕聚焦成功的时候是否需要提示
                            .setFocusFailTips("聚焦失败")//聚焦失败的提示
                            .setFocusSuccessTips("聚焦成功")//聚焦成功的提示
                            .setFocusViewTime(3)//聚焦的时间,是秒
                            .setFocusViewColor(ContextCompat.getColor(this, R.color.blue))//聚焦框的颜色
                            .setFocusViewSize(Tools.dp2px(this, 60))//聚焦框的大小(正方形的)
                            .setCornerViewSize(Tools.dp2px(this, 12))//聚焦框的圆角大小
                            .setFocusViewStrokeSize(Tools.dp2px(this, 2))//聚焦框线条宽度
                            .setRequestCode(CameraConstant.REQUEST_CODE)//请求码
                            .build();

            //第一个参数是必须要有的,后面的参数不是必须的,如果想获取默认参数可以像下面这样
            Log.d("wld______", mCameraParam.getPicturePath());

至于文件的获取路径可以使用下面的方式

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    
    
        super.onActivityResult(requestCode, resultCode, data);
        //requestCode默认是CameraConstant.REQUEST_CODE ,当然也可以在上面的CameraParam创建的时候
        //调用setRequestCode修改
        if (requestCode == CameraConstant.REQUEST_CODE && resultCode == RESULT_OK) {
    
    
            //获取图片路径
            String picturePath = data.getStringExtra(CameraConstant.PICTURE_PATH_KEY);
            //显示出来
            img_picture.setVisibility(View.VISIBLE);
            img_picture.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }

具体项目demo可以到github上下载。

猜你喜欢

转载自blog.csdn.net/abcdef314159/article/details/113758931