a lightweight image compress framework for Android based on libJpeg.
一個基於libJpeg的壓縮圖片框架, 支持配合rxjava使用。
能夠一行代碼解決圖片下載->壓縮->顯示的過程。java
先展現一下壓縮先後的效果對比,以及文件大小和佔用內存的大小 demo比較簡單,運行的時候請打開sd卡權限和相冊拍照權限。react
支持的壓縮類型: File,String,Uri,Bytes,Bitmap,DrawableResourceID,Drawableandroid
1.0.0 完成大體功能
1.1.0 修復從uri獲取路徑錯誤的bug;
增長ignoreSize的設置,以便用於壓縮圖片保持原尺寸;
支持配合rxjava2使用;
複製代碼
android {
...
defaultConfig{
...
ndk {
abiFilters 'armeabi-v7a', 'armeabi', 'x86'
}
}
}
//引入
implementation 'com.noober.light:core:1.1.0'
//若是要配合rxjava2,加入rxjava2的依賴
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
複製代碼
CompressArgs這個類用於設置每次所要壓縮到的指定的寬高以及壓縮質量。使用以下:git
CompressArgs args = new CompressArgs.Builder().width(width).height(height).quality(70).ignoreSize(false).build();
複製代碼
1.width: 要壓縮到的圖片的寬度,單位px 2.height: 要壓縮到的圖片的高度,單位px 3.quality: 壓縮質量, 可選範圍是0-100。 4.ignoreSize: 是否要忽略壓縮後圖片寬高的限制, 若是設爲true,壓縮的時候會根據原圖自己大小進行壓縮,設置的width和height就會失效,默認false。 由於從網絡下載圖片保存到本地,中間默認會自動壓縮圖片,若是不想對圖片進行壓縮,並保持寬高的話,設置以下參數便可:github
CompressArgs args = new CompressArgs.Builder().quality(100).ignoreSize(true).build();
複製代碼
調用compress方法的時候也能夠不初始化這個參數,框架會自動初始化一個默認的壓縮設置。網絡
默認規則以下: 壓縮圖片的最大默認高度是屏幕高度; 圖片的最大寬度是屏幕寬度; 默認壓縮質量是85; ignoreSize 爲false。框架
建議在Application的onCreate中進行初始化,使用以下:異步
LightConfig lightConfig = new LightConfig();
lightConfig.setDefaultQuality(xx);
lightConfig.setMaxWidth(xx);
lightConfig.setMaxHeight(xx);
lightConfig.setMaxHeight(xx);
lightConfig.setNeedIgnoreSize(xx);
Light.getInstance().setConfig(lightConfig);
複製代碼
支持File,String,Uri,Bytes,Bitmap,DrawableResourceID,Drawable這5種類型壓縮爲Bitmap。maven
//String,Uri,Bytes,Bitmap,File -->bitmap
Bitmap bitmap = Light.getInstance().compress(path);
//args爲CompressArgs壓縮參數,不傳入,即用默認參數
Bitmap bitmap = Light.getInstance().compress(path, args);
.....
複製代碼
支持File,String,Uri,Bytes,Bitmap這5種類型保存爲文件。 想對於壓縮成Bitmap的方法只是多了一個輸出路徑。svg
//images --> boolean //保存圖片,返回值表明保存是否成功
//img爲要壓縮的圖片,args是壓縮參數,不傳即默認, outPath爲輸出路徑
Light.getInstance().compress(img, args, outPath);
Light.getInstance().compress(img, outPath);
//支持類型Bitmap, Bytes, String, Resource, Uri, Drawable
複製代碼
關於配合RxJava2使用的類都在RxLight這個類中。 經過與rxJava的配合,一行代碼就能實現從網絡下載->壓縮->顯示,這個過程,很是的方便。
使用方法以下:
RxLight會自動對圖片進行下載 -> 壓縮 -> 顯示或保存到本地
//uri類型的網絡資源
Flowable.just(uri).compose(RxLight.compressForUriHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
List<Uri> urlList = new ArrayList<>();
....
Flowable.fromIterable(urlList).compose(RxLight.compressForUriHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
//url類型的網絡資源
Flowable.just(url).compose(RxLight.compressForStringHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
List<String> urlList = new ArrayList<>();
....
Flowable.fromIterable(urlList).compose(RxLight.compressForStringHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
//或者傳入自定義的壓縮參數只須要在compressForUriHttp() 和 compressForStringHttp()傳入CompressArgs便可
CompressArgs args = new CompressArgs();
....
Flowable.just(uri).compose(RxLight.compressForUriHttp(args)).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
複製代碼
與上述方法相似,只須要compressForUri() 和 compressForString()傳入要保存到的路徑便可。一樣支持uri和string的網絡地址類型。
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/pic.jpg";
Flowable.just(uri).compose(RxLight.compressForUriHttp(path)).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
//自定義壓縮參數
CompressArgs args = new CompressArgs();
....
Flowable.just(uri).compose(RxLight.compressForUriHttp(path, args)).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
複製代碼
一樣都支持 File,String,Uri,Bytes,Bitmap,DrawableResourceID,Drawable這幾種類型
經過RxLight.compress()方法便可:
Flowable.just(image).compose(RxLight.compress()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
複製代碼
經過RxLight.compress(outPath)方法便可:
Flowable.just(image).compose(RxLight.compress(outPath)).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
複製代碼
1:MemoryComputeUtil工具類,獲取bitmap佔用內存的大小,返回值單位是kb。
MemoryComputeUtil.getMemorySize(compressBitmap)
複製代碼
2:關於so文件的編譯,能夠移步github.com/JavaNoober/…。 如何去編譯,我在好久以前的寫過一個博客介紹過:blog.csdn.net/qq_25412055…
3:MatrixUtil工具類 能夠很方便的對Bitmap進行放大縮小、旋轉、縮放、平移等處理,使用也很方便,支持Matrix的大部分方法。
Bitmap result = new MatrixUtil.Build().scale(scaleSize, scaleSize).rotate(90f).bitmap(bitmap).build();
複製代碼
版本還在逐步更新中,歡迎各位大佬star,以及提出建議。
GitHub demo下載地址:github.com/JavaNoober/…