最近在重構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