uTakePhoto-拍照、選擇照片、裁剪、壓縮,一行搞定

拍照或者選擇照片,首先須要權限判斷,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() {

            }
        });
複製代碼

或者這樣android

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:git

implementation 'com.sl.utakephoto:uTakePhoto:1.0.6'
複製代碼

Mavengithub

<dependency>
  <groupId>com.sl.utakephoto</groupId>
  <artifactId>uTakePhoto</artifactId>
  <version>1.0.6</version>
  <type>pom</type>
</dependency>
複製代碼

API

基本用法

圖片默認儲存在context.getExternalFilesDir("Pictures") 目錄下,不須要指定的話,一行代碼足矣:bash

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中配置壓縮和裁剪app

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()爲根路徑。根據須要選擇ide

選擇照片

默認打開相冊Intentui

/**
     * 打開相冊
     *
     * @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,簡單壓縮,若是不想使用,能夠本身拿到圖片處理this

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() {

                    }
                }
複製代碼

最後

既然來了,留下個喜歡再走吧,鼓勵下我,哈哈spa

Github線程

相關文章
相關標籤/搜索