簡單 強大的圖片操做庫

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

相關文章
相關標籤/搜索