最近在重构APP的图片模块,就顺便写了这个图片操做库,其中基本涵盖了APP开发中全部的图片操做。git
对Fresco, ImageLoader, Glide进行了统一的封装,固然也可进行扩展。具体可参见ImageLoaderManagergithub
相似朋友圈选择照片,提供了简洁的使用接口,可快速实现选择多张照片的功能;服务器
// 跳转到相册页面 new PhotoPicker.Builder() .setIsDialog(false) .setIsShowCamera(false) .setMaxPhotoCount(3) .setSelectedPhotos(selectedPhotos) .builder().chooseImage(AlbumActivity.this); // 获取选择的照片 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PhotoPicker.REQUEST_CODE_CHOOSE_PHOTO && data != null) { selectedPhotos = data.getStringArrayListExtra(PhotoPicker.SELECTED_PHOTOS); if (selectedPhotos != null && selectedPhotos.size() > 0) { // 处理逻辑 } } }
PS:这里的处理逻辑参考了PhotoPickeride
这多是APP不可或缺的一个小功能,不过其中也存在许多兼容性的坑,为了便于之后使用,将其封装成了一个简单的工具类,经过简单的几行代码便可实现更换头像的操做。工具
// 选择照片后是否须要裁剪 ChoosePhotoManager.getInstance().setAutoCrop(true); // 从相机获取照片 ChoosePhotoManager.getInstance().choosePhotoFromCamera(ChooseAndCropImageActivity.this); // 从相册选择照片 ChoosePhotoManager.getInstance().choosePhotoFromAlbum(ChooseAndCropImageActivity.this); // 监听选择照片的结果 ChoosePhotoManager.getInstance().setChoosePhotoListener(new OnChoosePhotoListener() { @Override public void choosePhotoFromAlbum(Uri uri, String errMsg) { // 从相册选择的照片路径 } @Override public void choosePhotoFromCamera(Uri uri, String errMsg) { // 拍照获取的的照片路径 } @Override public void cropPhoto(Uri uri, String errMsg) { // 裁剪以后的照片路径 } });
为了更好的用户体验,减少服务器的存储压力,在上传图片以前咱们应该进行适当的压缩,这里采用Luban库,经过简单的调用便可在上传图片前压缩。ui
void compressImage(Context context, String filePath, OnCompressListener listener)
既然选择了照片,那确定须要上传操做,这里为了减少对其余开源库的依赖,使用了HttpURLConnection实现的上传操做(固然,OKHttp的上传文件更简单)。this
// 默认开启了图片压缩, 固然可经过两个重载方法进行控制 uploadToInnerServer(Activity context, String serverAddress, String filePath, final OnUploadListener listener)
图片上传的方式有两种,一种是上传到公司服务器,而后由公司服务器上传到图片服务器,另外一种就是直接从客户端上传到图片服务器。上传到七牛就是第二种方案:先从公司服务器获取token, 而后上传图片到七牛服务器。lua
void uploadToQiNiu(Activity context, String token, String filePath, OnUploadToQiNiuListener listener)
ImageSetcode
这个库基本上封装了APP中图片的全部操做,使用过程当中若有问题欢迎issue。server