Android获取照片,裁剪图片,压缩图片

  

<强>前言

  

在做上一个项目时深深受到了图片上传的苦恼。图片上传主要分为两个部分,首先要获取图片,而获取图片可以分为从文件获取或者拍照获取第。二个部分才是上传图片,两个部分都是走了不少弯路。由于Android系统的碎片化比较严重,我们可能出现在第一台机子上能获取图片,但是换一个机子就不能获取图片的问题,并且在Android6.0, 7.0之后也要做一定的适配,这样对于开发者来说,无疑很蛋疼,由于也是初学者,很多东西没有考虑到,适配起来也是有点难度的。

  

这几天也是从github上找到了一个库(地址在这TakePhoto),经过简单的学习之后,发现用起来还是蛮简单的,并且在不同机型之间都能达到同样的效果。更重要的是可以根据不同配置达到不同的效果

  

接下来看下用法

  

<强>获取图片

  

1)获取TakePhoto对象

  

一)通过继承的方式

  

继承TakePhotoActivity、TakePhotoFragmentActivity TakePhotoFragment三者之一。
  通过getTakePhoto()获取TakePhoto实例进行相关操作。
  重写以下方法获取结果
  

        空白takeSuccess (TResult结果);   空白takeFail (TResult结果字符串味精);   空白takeCancel ();   之前      

这种方法使用起来虽然简单,但是感觉定制性不高,必须继承指定的活动,而有时我们已经封装好了BaseActivity,不想再改了。有时候通过继承无法满足实际项目的需求。

  

二)通过组装的方式去使用

  

实现TakePhoto。TakeResultListener, InvokeListener接口。
  在>   @Override   公共空间>   @Override   公共TPermissionType调用(InvokeParam InvokeParam) {   TPermissionType类型=PermissionManager.checkPermission (TContextWrap.of(这),invokeParam.getMethod ());   如果(TPermissionType.WAIT.equals(类型)){   this.invokeParam=invokeParam;   }   返回类型;   }   之前      

添加如下代码获取TakePhoto实例:
  

     /* *   *获取TakePhoto实例   * @return   */公共TakePhoto getTakePhoto () {   如果(takePhoto==null) {   takePhoto=(takePhoto) TakePhotoInvocationHandler.of(这个)。绑定(新TakePhotoImpl(这));   }   返回takePhoto;   }   之前      

2)自定义UI

  

不仅可以对于参数自定义,也可以对于UI的自定义,比如自定义相册,自定义工具栏,自定义状态栏,自定义提示文字,自定义裁切工具(需要使用自带的TakePhoto裁剪才行)。

  

3)通过TakePhoto对象获取图片

  

支持从相册获取,也支持拍的照,相关Api

        *从相机获取图片并裁剪   * @param outPutUri图片裁剪之后保存的路径   * @param选项裁剪配置   */空白>   公共类TakePhotoUtil实现TakePhoto。TakeResultListener InvokeListener {      私有静态最终字符串标签=TakePhotoUtil.class.getName ();   私人TakePhoto TakePhoto;   私人InvokeParam InvokeParam;   私人活动活动;   私人片段片段;      公共TakePhotoUtil(活动活动){   这一点。活动=活动;   }      公共TakePhotoUtil(片段片段){   this.fragment=片段;   }/* *   *获取TakePhoto实例   * @return   */公共TakePhoto getTakePhoto () {   如果(takePhoto==null) {   takePhoto=(takePhoto) TakePhotoInvocationHandler.of(这个)。绑定(新TakePhotoImpl(活动,本);   }   返回takePhoto;   }      公共空间>   保护TakePhotoUtil TakePhotoUtil;      @Override   保护空白>   @Override   保护布尔useTakePhoto () {   返回true;   }   之前      

2)获取图片
  

        takePhotoUtil.takePhoto (TakePhotoUtil.Select_type。PICK_BY_TAKE,新的TakePhotoUtil.SimpleTakePhotoListener () {   @Override   公共空间takeSuccess (TResult结果){   .getCompressPath字符串s=result.getImage () ();   位图的位图=BitmapFactory.decodeFile(年代);   iv.setImageBitmap(位图);   }   });   之前      

takePhoto()的第一个参数是一个枚举类型的参数,分别为从相册获取和拍照获取,第二个参数为获取成功失败监听,有三个回调,由于有些回调不是必须的,所以对侦听器做了一个适配,只需要回调想要的方法即可,获取成功之后就可以通过TResult封装的参数获取想要的图片以及图片地址。对于获取到的图片地址就可以做一些上传处理。

Android获取照片,裁剪图片,压缩图片