Android圖片無失真壓縮庫ImageCompress使用
圖片壓縮一直是Android的一個痛點,相比較於iOS的效果,Android的壓縮簡直可以用慘不忍睹來形容!
開源庫ImageCompress是基於libjpeg-turbo來進行圖片的壓縮,它的優點在於相較於libjpeg來說壓縮時間大大的縮短了(4.5M的圖片壓縮完耗時約1.2秒),而相較於Android系統的圖片壓縮來說ImageCompress在圖片處理的過程使用了哈弗曼表,這大大的提高了相同體積下圖片的清晰度。
一:先來看看效果
這個是手機拍攝的原圖4.28MB。
這裡是上一個圖片的詳細資訊
這個是普通壓縮後的圖片,大小為347KB
而可變圖片寬高的壓縮方式中,圖片最小可壓縮到40KB,解析度為747X1328
二、看過了效果,那麼我們來看下怎麼使用吧!
1、 對於Android Studio的使用者,可以選擇新增:
compile 'com.wgd.gdcp.gdcplibrary:ImageCompress:1.0.9'
或
implementation 'com.wgd.gdcp.gdcplibrary:ImageCompress:1.0.9'
如果報錯的話可以在專案的build.gradle中加入
allprojects {
repositories {
maven { url "https://dl.bintray.com/wangruijun/maven" }
}
}
或
allprojects {
repositories {
jcenter()
}
}
2、使用圖片壓縮
(1)、普通壓縮方式(前期方式,後期版本也會一直相容)
強調:這裡runOnUiThread方法可以不用,但要注意的是:雖然jar包中處理了,但不保證一定是在主執行緒中回撥。
new GDCompress(MainActivity.this, tempCompressImgPath, tempCompressImgPath, new GDCompressImageListener() { @Override public void OnSuccess(String path) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { } }); } @Override public void OnError(int code, String errorMsg) { } });
(2)、多個圖片同時壓縮(GDConfig中屬性下邊統一解釋)
注:這裡OnError方法中返回的資料GDImageBean中通過code欄位來判斷圖片是否成功壓縮;而OnSuccess方法中所有的圖片都是壓縮完成的(即只要有一個圖片壓縮失敗都是回撥OnError方法)。
List<GDImageBean> imageBeans = new ArrayList<>(); for (int i = 0; i < selectList.size(); i++) { final String imgpath = selectList.get(i).getPath(); imageBeans.add(new GDImageBean(new GDConfig().setmPath(imgpath))); } new GDCompressImageS(SendCircleActivity.this, new GDCompressImageSListener() { @Override public void OnSuccess(List<GDImageBean> imageBeanList) { } @Override public void OnError(List<GDImageBean> imageBeanList) { } }, imageBeans);
(3)、可控制圖片解析度大小的壓縮(GDConfig中屬性下邊統一解釋)
new GDCompressC(MainActivity.this, new GDConfig().setmPath(tempCompressImgPath).setChangeWH(true), new GDCompressImageListener() { @Override public void OnSuccess(String path) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { } }); } @Override public void OnError(int code, String errorMsg) { } });
(4)、GDConfig中屬性統一解釋
new GDConfig() .setmPath(tempCompressImgPath)//要壓縮圖片的原路徑 .setSavePath(tempCompressImgPath)//壓縮圖片的儲存路徑,如果不設定將替換原檔案 .setChangeWH(true)//是否要進行調整圖片解析度以壓縮到更小 .setWidth(720)//需要調整解析度的時候有效,壓縮後的寬度(按比例計算後的,而不是直接使用這個) .setHeight(1280)//需要調整解析度的時候有效,壓縮後的高度(按比例計算後的,而不是直接使用這個)