欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

uTakePhoto-拍照、选择照片、裁剪、压缩,一行搞定,拍照裁剪, relativePat

来源: 开发者 投稿于  被查看 44718 次 评论:64

uTakePhoto-拍照、选择照片、裁剪、压缩,一行搞定,拍照裁剪, relativePat


拍照或者选择照片,首先需要权限判断,camera、sd卡权限,Android7.0,AndroidQ,然后还要重写onActiviyResult等等,为了解放双手,特推出uTakePhoto,不需要管androidQ,不需要做权限适配,直接链式调用:


UTakePhoto简介

  • 支持系统拍照,及自定义Intent拍照

  • 支持相册选取,及自定义Intent获取

  • 支持图片压缩,默认采用鲁班压缩

  • 支持图片裁剪,系统裁剪及自带裁剪

  • 自动适配camera及sd权限

  • 适配AndroidQ

  • 链式调用

如何使用

    UTakePhoto.with(mActivity).openCamera().build(new ITakePhotoResult() {
            @Override
            public void takeSuccess(List<Uri> uriList) {
                
            }

            @Override
            public void takeFailure(TakeException ex) {

            }

            @Override
            public void takeCancel() {

            }
        });

或者这样

           UTakePhoto.with(mFragment)
                .openAlbum()
                .setCrop(new CropOptions.Builder().create())
                .setCompressConfig(new CompressConfig.Builder().create())
                .build(new ITakePhotoResult() {
                    @Override
                    public void takeSuccess(List<Uri> uriList) {

                    }

                    @Override
                    public void takeFailure(TakeException ex) {

                    }

                    @Override
                    public void takeCancel() {

                    }
                });

安装说明

Gradle:

implementation 'com.sl.utakephoto:uTakePhoto:1.0.6'

Maven

<dependency>
  <groupId>com.sl.utakephoto</groupId>
  <artifactId>uTakePhoto</artifactId>
  <version>1.0.6</version>
  <type>pom</type>
</dependency>

API

基本用法

图片默认储存在context.getExternalFilesDir("Pictures") 目录下,不需要指定的话,一行代码足矣:

UTakePhoto.with(mActivity).openCamera().build(new ITakePhotoResult() {
            @Override
            public void takeSuccess(List<Uri> uriList) {
                
            }

            @Override
            public void takeFailure(TakeException ex) {

            }

            @Override
            public void takeCancel() {

            }
        });

初始化

UTakePhoto.init();可以在application中配置压缩和裁剪

 public static void init(CompressConfig compressConfig, CropOptions cropOptions) {
        mCompressConfig = compressConfig;
        mCropOptions = cropOptions;
    }

拍照

     /**
     * 默认储存在getExternalFilesDir(Pictures)目录下
     *
     * @return
     */
    public TakePhotoManager openCamera() {
        return openCamera(null, null, null);
    }

    /**
     * 打开系统相机,输出路径自定义
     *
     * @param outPutUri 拍照路径
     * @return
     */
    public TakePhotoManager openCamera(Uri outPutUri) {
        return openCamera(outPutUri, null, null);
    }

    /**
     * 打开系统相机,输出路径自定义
     * 在androidQ上建议采用这个方法,因为如果采用传入mediaStore的Uri的方式,会在相册里创建一个空的img
     *
     * @param relativePath androidQ上清单文件中android:requestLegacyExternalStorage="true"
     *                     则relativePath 必须以 Pictures/DCIM 为跟路径;
     *                     Q以下默认根路径是Environment.getExternalStorageDirectory()
     * @return
     */
    public TakePhotoManager openCamera(String relativePath) {
        return openCamera(null, relativePath, null);
    }

如果想获取拍照图片的话,传入指定Uri或者使用relativePath两种方式。 relativePath对应androidQ中MediaStore.Images.Media.RELATIVE_PATH, androidQ以下的以Environment.getExternalStorageDirectory()为根路径。根据需要选择

选择照片

默认打开相册Intent

     /**
     * 打开相册
     *
     * @return
     */
    public TakePhotoManager openAlbum() {
        return openAlbum(null);
    }

    /**
     * 打开指定相册
     *
     * @param intent 通过Intent跳转的时候,需要返回setResult(RESULT_OK,Intent.setData(Uri)))
     * @return this
     */
    public TakePhotoManager openAlbum(Intent intent) {
        takeType = TYPE_SELECT_IMAGE;
        this.intent = intent;
        return this;
    }

裁剪

CropOptions cropOptions = new CropOptions.Builder()
.setAspectX(1).setAspectY(1)
.setOutputX(100).setOutputY(1)
.setWithOwnCrop(true)//使用系统裁剪还是自带裁剪
.create();
UTakePhoto.with(mActivity).openCamera().setCrop(cropOptions)

压缩

压缩采用luban压缩,计算inSampleSize,简单压缩,如果不想使用,可以自己拿到图片处理

CompressConfig compressConfig = new CompressConfig.Builder()
                .setFocusAlpha(false)//是否支持透明度
                .setLeastCompressSize(200)//最小压缩尺寸
                .setTargetUri()//压缩图片储存路径
                .create();
UTakePhoto.with(mActivity).openCamera().setCompressConfig(compressConfig)

结果回调

            new ITakePhotoResult() {
                    @Override
                    public void takeSuccess(List<Uri> uriList) {
                        //主线程
                    }

                    @Override
                    public void takeFailure(TakeException ex) {

                    }

                    @Override
                    public void takeCancel() {

                    }
                }

最后

既然来了,留下个喜欢再走吧,鼓励下我,哈哈

Github,


用户评论