摘要:最近在重構(gòu)的圖片模塊,就順便寫了這個(gè)圖片操作庫(kù),其中基本涵蓋了開(kāi)發(fā)中所有的圖片操作。項(xiàng)目地址這個(gè)庫(kù)基本上封裝了中圖片的所有操作,使用過(guò)程中如有問(wèn)題歡迎。
最近在重構(gòu)APP的圖片模塊,就順便寫了這個(gè)圖片操作庫(kù),其中基本涵蓋了APP開(kāi)發(fā)中所有的圖片操作。
該圖片庫(kù)包含的功能圖片加載庫(kù)的二次封裝;
相冊(cè)功能
從相冊(cè)/相機(jī)選擇照片并裁剪;
圖片壓縮;
上傳圖片到服務(wù)器;
上傳圖片到七牛;
模塊介紹 圖片加載庫(kù)的二次封裝對(duì)Fresco, ImageLoader, Glide進(jìn)行了統(tǒng)一的封裝,當(dāng)然也可進(jìn)行擴(kuò)展。具體可參見(jiàn)ImageLoaderManager
相冊(cè)功能類似朋友圈選擇照片,提供了簡(jiǎn)潔的使用接口,可快速實(shí)現(xiàn)選擇多張照片的功能;
// 跳轉(zhuǎn)到相冊(cè)頁(yè)面 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:這里的處理邏輯參考了PhotoPicker
從相冊(cè)/相機(jī)選擇照片這可能是APP不可或缺的一個(gè)小功能,不過(guò)其中也存在許多兼容性的坑,為了便于以后使用,將其封裝成了一個(gè)簡(jiǎn)單的工具類,通過(guò)簡(jiǎn)單的幾行代碼即可實(shí)現(xiàn)更換頭像的操作。
// 選擇照片后是否需要裁剪 ChoosePhotoManager.getInstance().setAutoCrop(true); // 從相機(jī)獲取照片 ChoosePhotoManager.getInstance().choosePhotoFromCamera(ChooseAndCropImageActivity.this); // 從相冊(cè)選擇照片 ChoosePhotoManager.getInstance().choosePhotoFromAlbum(ChooseAndCropImageActivity.this); // 監(jiān)聽(tīng)選擇照片的結(jié)果 ChoosePhotoManager.getInstance().setChoosePhotoListener(new OnChoosePhotoListener() { @Override public void choosePhotoFromAlbum(Uri uri, String errMsg) { // 從相冊(cè)選擇的照片路徑 } @Override public void choosePhotoFromCamera(Uri uri, String errMsg) { // 拍照獲取的的照片路徑 } @Override public void cropPhoto(Uri uri, String errMsg) { // 裁剪之后的照片路徑 } });圖片壓縮
為了更好的用戶體驗(yàn),減小服務(wù)器的存儲(chǔ)壓力,在上傳圖片之前我們應(yīng)該進(jìn)行適當(dāng)?shù)膲嚎s,這里采用Luban庫(kù),通過(guò)簡(jiǎn)單的調(diào)用即可在上傳圖片前壓縮。
void compressImage(Context context, String filePath, OnCompressListener listener)上傳圖片到服務(wù)器
既然選擇了照片,那肯定需要上傳操作,這里為了減小對(duì)其他開(kāi)源庫(kù)的依賴,使用了HttpURLConnection實(shí)現(xiàn)的上傳操作(當(dāng)然,OKHttp的上傳文件更簡(jiǎn)單)。
// 默認(rèn)開(kāi)啟了圖片壓縮, 當(dāng)然可通過(guò)兩個(gè)重載方法進(jìn)行控制 uploadToInnerServer(Activity context, String serverAddress, String filePath, final OnUploadListener listener)上傳圖片到七牛
圖片上傳的方式有兩種,一種是上傳到公司服務(wù)器,然后由公司服務(wù)器上傳到圖片服務(wù)器,另一種就是直接從客戶端上傳到圖片服務(wù)器。上傳到七牛就是第二種方案:先從公司服務(wù)器獲取token, 然后上傳圖片到七牛服務(wù)器。
void uploadToQiNiu(Activity context, String token, String filePath, OnUploadToQiNiuListener listener)項(xiàng)目地址
ImageSet
這個(gè)庫(kù)基本上封裝了APP中圖片的所有操作,使用過(guò)程中如有問(wèn)題歡迎issue。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/71159.html
摘要:轉(zhuǎn)載來(lái)源包管理器管理著庫(kù),并提供讀取和打包它們的工具。能構(gòu)建更好應(yīng)用的客戶端包管理器。一個(gè)整合和的最佳思想,使開(kāi)發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。很棒的組件集合。隱秘地使用和用戶數(shù)據(jù)。 轉(zhuǎn)載來(lái)源:https://github.com/jobbole/aw... 包管理器管理著 javascript 庫(kù),并提供讀取和打包它們的工具。?npm – npm 是 javasc...
摘要:轉(zhuǎn)載來(lái)源包管理器管理著庫(kù),并提供讀取和打包它們的工具。能構(gòu)建更好應(yīng)用的客戶端包管理器。一個(gè)整合和的最佳思想,使開(kāi)發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。很棒的組件集合。隱秘地使用和用戶數(shù)據(jù)。 轉(zhuǎn)載來(lái)源:https://github.com/jobbole/aw... 包管理器管理著 javascript 庫(kù),并提供讀取和打包它們的工具。?npm – npm 是 javasc...
閱讀 3386·2021-11-12 10:36
閱讀 2554·2021-11-02 14:43
閱讀 2205·2019-08-30 14:23
閱讀 3519·2019-08-30 13:08
閱讀 975·2019-08-28 18:09
閱讀 3214·2019-08-26 12:22
閱讀 3226·2019-08-23 18:24
閱讀 2072·2019-08-23 18:17