Skip to content

Commit f4435b4

Browse files
committed
update to 1.2.1增加磁盘缓存
1 parent 4416420 commit f4435b4

19 files changed

+1608
-169
lines changed

.idea/gradle.xml

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+16-11
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ a lightweight image compress framework for Android based on libJpeg.
4343
1.1.7 默认对gif不支持压缩
4444
1.1.9 修复bug
4545
1.2.0 增加Bitmap.Config的设置,默认是RGB_565,可以在CompressArgs设置,也可以在LightConfig统一配置
46+
1.2.1 网络图片下载增加磁盘缓存
4647

4748
### 使用方法:
4849

@@ -54,7 +55,7 @@ a lightweight image compress framework for Android based on libJpeg.
5455
}
5556
5657
//引入
57-
implementation 'com.noober.light:core:1.2.0'
58+
implementation 'com.noober.light:core:1.2.1'
5859
5960
//如果要配合rxjava2,加入rxjava2的依赖
6061
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
@@ -126,9 +127,9 @@ a lightweight image compress framework for Android based on libJpeg.
126127

127128
#### 从网络获取图片
128129
129-
注意,onCompressFinishListener必须实现,否则会不进行下载,onCompressFinishListener必须实现接口返回值是byte,可以用来保存到file
130-
131-
Light.getInstance().compressFromHttp(uri, new OnCompressFinishListener() {
130+
注意,onCompressFinishListener必须实现,否则会不进行下载,onCompressFinishListener必须实现接口返回值是byte,可以用来保存到file, openDiskCache若为true则开启图片缓存
131+
132+
Light.getInstance().compressFromHttp(uri, openDiskCache, new OnCompressFinishListener() {
132133
@Override
133134
public void onFinish(byte[] bytes) {
134135
Bitmap bitmap = Light.getInstance().compress(bytes);
@@ -145,30 +146,34 @@ a lightweight image compress framework for Android based on libJpeg.
145146
RxLight会自动对图片进行下载 -> 压缩 -> 显示或保存到本地
146147
###### 从网络获取资源 -> Bitmap:
147148

149+
RxLight.compressForUriHttp()中参数openDiskCache控制是否增加磁盘缓存
150+
148151
//uri类型的网络资源
149-
Flowable.just(uri).compose(RxLight.compressForUriHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
152+
Flowable.just(uri).compose(RxLight.compressForUriHttp()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
150153
List<Uri> urlList = new ArrayList<>();
151154
....
152-
Flowable.fromIterable(urlList).compose(RxLight.compressForUriHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
155+
Flowable.fromIterable(urlList).compose(RxLight.compressForUriHttp()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
153156
//url类型的网络资源
154-
Flowable.just(url).compose(RxLight.compressForStringHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
157+
Flowable.just(url).compose(RxLight.compressForStringHttp()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
155158
List<String> urlList = new ArrayList<>();
156159
....
157-
Flowable.fromIterable(urlList).compose(RxLight.compressForStringHttp()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
160+
Flowable.fromIterable(urlList).compose(RxLight.compressForStringHttp()).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
158161
//或者传入自定义的压缩参数只需要在compressForUriHttp() 和 compressForStringHttp()传入CompressArgs即可
159162
CompressArgs args = new CompressArgs();
160163
....
161-
Flowable.just(uri).compose(RxLight.compressForUriHttp(args)).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
164+
Flowable.just(uri).compose(RxLight.compressForUriHttp(args)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(bitmap -> ivCompress.setImageBitmap(bitmap));
162165

163166
###### 从网络获取资源 -> boolean(保存到本地):
164167
与上述方法类似,只需要compressForUri() 和 compressForString()传入要保存到的路径即可。同样支持uri和string的网络地址类型。
165168

169+
170+
RxLight.compressForUriHttp(中参数openDiskCache控制是否增加磁盘缓存, path)中参数openDiskCache控制是否增加磁盘缓存
166171
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/pic.jpg";
167-
Flowable.just(uri).compose(RxLight.compressForUriHttp(path)).subscribe(result -> {});
172+
Flowable.just(uri).compose(RxLight.compressForUriHttp(path)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {});
168173
//自定义压缩参数
169174
CompressArgs args = new CompressArgs();
170175
....
171-
Flowable.just(uri).compose(RxLight.compressForUriHttp(path, args)).subscribe(result -> {});
176+
Flowable.just(uri).compose(RxLight.compressForUriHttp(path, args)).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(result -> {});
172177

173178
##### 通过本地资源异步压缩
174179
同样都支持 File,String,Uri,Bytes,Bitmap,DrawableResourceID,Drawable这几种类型

app/build.gradle

+10-10
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ android {
2424
jniLibs.srcDirs = ['libs']
2525
}
2626
}
27-
splits {
28-
abi {
29-
enable true
30-
reset()
31-
include 'armeabi-v7a', 'armeabi'
32-
universalApk true
33-
}
34-
}
27+
// splits {
28+
// abi {
29+
// enable true
30+
// reset()
31+
// include 'armeabi-v7a', 'armeabi'
32+
// universalApk true
33+
// }
34+
// }
3535
compileOptions {
3636
sourceCompatibility JavaVersion.VERSION_1_8
3737
targetCompatibility JavaVersion.VERSION_1_8
@@ -46,8 +46,8 @@ dependencies {
4646
testImplementation 'junit:junit:4.12'
4747
androidTestImplementation 'com.android.support.test:runner:1.0.1'
4848
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
49-
implementation 'com.noober.light:core:1.2.0'
50-
// implementation project(':light')
49+
// implementation 'com.noober.light:core:1.2.0'
50+
implementation project(':light')
5151
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
5252
implementation 'io.reactivex.rxjava2:rxjava:2.1.7'
5353
}

app/src/main/java/com/light/example/NetActivity.java

+121-100
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.light.core.Utils.MatrixUtil;
1818
import com.light.core.Utils.MemoryComputeUtil;
1919
import com.light.core.Utils.http.HttpDownLoader;
20+
import com.light.core.listener.OnCompressFinishListener;
2021

2122
import java.io.BufferedOutputStream;
2223
import java.io.File;
@@ -32,109 +33,129 @@
3233
import io.reactivex.schedulers.Schedulers;
3334

3435
public class NetActivity extends AppCompatActivity {
35-
ImageView ivCompress;
36-
ImageView ivImage;
37-
TextView tvInfo;
38-
TextView tvInfo1;
39-
TextView tvInfo2;
40-
TextView tvSize;
41-
Button button1;
42-
Button button2;
43-
Button button3;
44-
String path1 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/1.jpg";//压缩后
45-
String path2 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/2.jpg";//原图片
46-
final static String info1 = "压缩后:\n高度:%d,宽度:%d,占用内存:%dKB";
47-
final static String info2 = "原图片:\n高度:%d,宽度:%d,占用内存:%dKB";
48-
ProgressDialog progressDialog;
49-
@Override
50-
protected void onCreate(Bundle savedInstanceState) {
51-
super.onCreate(savedInstanceState);
52-
setContentView(R.layout.activity_net);
53-
ivCompress = findViewById(R.id.image_compress);
54-
ivImage = findViewById(R.id.image);
55-
tvInfo = findViewById(R.id.tv_info);
56-
tvInfo1 = findViewById(R.id.tv_info1);
57-
tvInfo2 = findViewById(R.id.tv_info2);
58-
button1 = findViewById(R.id.btn1);
59-
button2 = findViewById(R.id.btn2);
60-
button3 = findViewById(R.id.btn3);
61-
tvSize = findViewById(R.id.tv_size);
62-
tvInfo1.setVisibility(View.VISIBLE);
63-
tvInfo2.setVisibility(View.VISIBLE);
64-
progressDialog = new ProgressDialog(this);
65-
progressDialog.setTitle("图片加载中");
66-
progressDialog.setMessage("Loading...");
67-
progressDialog.setCancelable(false);
68-
button1.setOnClickListener(new View.OnClickListener() {
69-
@Override
70-
public void onClick(View v) {
71-
progressDialog.show();
72-
Uri uri = Uri.parse("http://img52.fooww.com:9999/group5/M01/00/99/ZyjCGlrtH9uEPlSIAAAAAN9Juaw140.jpg");
73-
showImg(uri);
74-
}
75-
});
36+
ImageView ivCompress;
37+
ImageView ivImage;
38+
TextView tvInfo;
39+
TextView tvInfo1;
40+
TextView tvInfo2;
41+
TextView tvSize;
42+
Button button1;
43+
Button button2;
44+
Button button3;
45+
String path1 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/1.jpg";//压缩后
46+
String path2 = Environment.getExternalStorageDirectory().getAbsolutePath() + "/2.jpg";//原图片
47+
final static String info1 = "压缩后:\n高度:%d,宽度:%d,占用内存:%dKB";
48+
final static String info2 = "原图片:\n高度:%d,宽度:%d,占用内存:%dKB";
49+
ProgressDialog progressDialog;
7650

77-
button2.setOnClickListener(new View.OnClickListener() {
78-
@Override
79-
public void onClick(View v) {
80-
progressDialog.show();
81-
Uri uri = Uri.parse("https://raw.githubusercontent.com/JavaNoober/Light/master/pic2.jpg");
82-
showImg(uri);
83-
}
84-
});
51+
@Override
52+
protected void onCreate(Bundle savedInstanceState) {
53+
super.onCreate(savedInstanceState);
54+
setContentView(R.layout.activity_net);
55+
ivCompress = findViewById(R.id.image_compress);
56+
ivImage = findViewById(R.id.image);
57+
tvInfo = findViewById(R.id.tv_info);
58+
tvInfo1 = findViewById(R.id.tv_info1);
59+
tvInfo2 = findViewById(R.id.tv_info2);
60+
button1 = findViewById(R.id.btn1);
61+
button2 = findViewById(R.id.btn2);
62+
button3 = findViewById(R.id.btn3);
63+
tvSize = findViewById(R.id.tv_size);
64+
tvInfo1.setVisibility(View.VISIBLE);
65+
tvInfo2.setVisibility(View.VISIBLE);
66+
progressDialog = new ProgressDialog(this);
67+
progressDialog.setTitle("图片加载中");
68+
progressDialog.setMessage("Loading...");
69+
progressDialog.setCancelable(false);
70+
button1.setOnClickListener(new View.OnClickListener() {
71+
@Override
72+
public void onClick(View v) {
73+
progressDialog.show();
74+
Uri uri = Uri.parse("http://img52.fooww.com:9999/group5/M01/00/99/ZyjCGlrtH9uEPlSIAAAAAN9Juaw140.jpg");
75+
showImg(uri);
76+
}
77+
});
8578

86-
button3.setOnClickListener(new View.OnClickListener() {
87-
@Override
88-
public void onClick(View v) {
89-
progressDialog.show();
90-
Uri uri = Uri.parse("https://raw.githubusercontent.com/JavaNoober/Light/master/pic3.jpg");
91-
showImg(uri);
92-
}
93-
});
94-
}
79+
button2.setOnClickListener(new View.OnClickListener() {
80+
@Override
81+
public void onClick(View v) {
82+
progressDialog.show();
83+
Uri uri = Uri.parse("http://k.zol-img.com.cn/sjbbs/7692/a7691515_s.jpg");
84+
showImg(uri);
85+
}
86+
});
9587

96-
private void showImg(Uri uri) {
88+
button3.setOnClickListener(new View.OnClickListener() {
89+
@Override
90+
public void onClick(View v) {
91+
progressDialog.show();
92+
Uri uri = Uri.parse("http://pic31.nipic.com/20130705/9527735_231540074000_2.jpg");
93+
showImg(uri);
94+
}
95+
});
96+
}
9797

98-
new Thread(new Runnable() {
99-
@Override
100-
public void run() {
101-
byte[] bytes = HttpDownLoader.downloadImage(uri);
102-
BitmapFactory.Options options = new BitmapFactory.Options();
103-
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
104-
File file = new File(path2);
105-
OutputStream output = null;
106-
try {
107-
output = new FileOutputStream(file);
108-
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
109-
bufferedOutput.write(bytes);
110-
} catch (FileNotFoundException e) {
111-
e.printStackTrace();
112-
} catch (IOException e) {
113-
e.printStackTrace();
114-
}
115-
runOnUiThread(new Runnable() {
116-
@Override
117-
public void run() {
118-
progressDialog.dismiss();
119-
float scaleX = MatrixUtil.getScale(1920, 1080, options.outWidth, options.outHeight);
120-
ivImage.setImageBitmap(new MatrixUtil.Build().scale(scaleX, scaleX).bitmap(bitmap).build());
121-
Light.getInstance().compress(path2, path1);
122-
tvInfo2.setText(String.format(Locale.CHINA, info2, options.outHeight,
123-
options.outWidth, MemoryComputeUtil.getMemorySize(bitmap)));
124-
tvSize.setText("原图片文件大小:" + file.length() / 1024 +"KB;压缩后图片文件大小:" +
125-
new File(path1).length() / 1024 + "KB");
126-
}
127-
});
128-
}
129-
}).start();
130-
Flowable.just(uri).compose(RxLight.compressForUriHttp())
131-
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
132-
.subscribe(bitmap -> {
133-
progressDialog.dismiss();
134-
ivCompress.setImageBitmap(bitmap);
135-
tvInfo1.setText(String.format(Locale.CHINA, info1, bitmap.getHeight(),
136-
bitmap.getWidth(), MemoryComputeUtil.getMemorySize(bitmap)));
137-
});
138-
}
98+
private void showImg(Uri uri) {
99+
100+
new Thread(new Runnable() {
101+
@Override
102+
public void run() {
103+
byte[] bytes = HttpDownLoader.downloadImage(uri);
104+
BitmapFactory.Options options = new BitmapFactory.Options();
105+
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
106+
File file = new File(path2);
107+
OutputStream output = null;
108+
try {
109+
output = new FileOutputStream(file);
110+
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
111+
bufferedOutput.write(bytes);
112+
} catch (FileNotFoundException e) {
113+
e.printStackTrace();
114+
} catch (IOException e) {
115+
e.printStackTrace();
116+
}
117+
runOnUiThread(new Runnable() {
118+
@Override
119+
public void run() {
120+
progressDialog.dismiss();
121+
float scaleX = MatrixUtil.getScale(1920, 1080, options.outWidth, options.outHeight);
122+
ivImage.setImageBitmap(new MatrixUtil.Build().scale(scaleX, scaleX).bitmap(bitmap).build());
123+
Light.getInstance().compress(path2, path1);
124+
tvInfo2.setText(String.format(Locale.CHINA, info2, options.outHeight,
125+
options.outWidth, MemoryComputeUtil.getMemorySize(bitmap)));
126+
tvSize.setText("原图片文件大小:" + file.length() / 1024 + "KB;压缩后图片文件大小:" +
127+
new File(path1).length() / 1024 + "KB");
128+
}
129+
});
130+
}
131+
}).start();
132+
Flowable.just(uri).compose(RxLight.compressForUriHttp())
133+
.subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
134+
.subscribe(bitmap -> {
135+
progressDialog.dismiss();
136+
ivCompress.setImageBitmap(bitmap);
137+
tvInfo1.setText(String.format(Locale.CHINA, info1, bitmap.getHeight(),
138+
bitmap.getWidth(), MemoryComputeUtil.getMemorySize(bitmap)));
139+
});
140+
141+
//缓存测试
142+
// new Thread(() -> Light.getInstance().compressFromHttp(uri, true, new OnCompressFinishListener() {
143+
// @Override
144+
// public void onFinish(byte[] bytes) {
145+
// Bitmap bitmap = Light.getInstance().compress(bytes);
146+
// runOnUiThread(() -> {
147+
// progressDialog.dismiss();
148+
// ivCompress.setImageBitmap(bitmap);
149+
// tvInfo1.setText(String.format(Locale.CHINA, info1, bitmap.getHeight(),
150+
// bitmap.getWidth(), MemoryComputeUtil.getMemorySize(bitmap)));
151+
// });
152+
// }
153+
//
154+
// @Override
155+
// public void onError(Throwable throwable) {
156+
//
157+
// }
158+
// })).start();
159+
}
139160

140161
}

build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ buildscript {
77
jcenter()
88
}
99
dependencies {
10-
classpath 'com.android.tools.build:gradle:3.0.1'
11-
classpath 'com.novoda:bintray-release:0.5.0'
10+
classpath 'com.android.tools.build:gradle:3.1.2'
11+
classpath 'com.novoda:bintray-release:0.8.1'
1212
// classpath 'com.android.tools.build:gradle:2.2.0'
1313
// NOTE: Do not place your application dependencies here; they belong
1414
// in the individual module build.gradle files
@@ -30,7 +30,7 @@ ext {
3030
userOrg = 'noober'
3131
groupId = 'com.noober.light'
3232
uploadName = 'Light'
33-
publishVersion = '1.2.0'
33+
publishVersion = '1.2.1'
3434
desc = "a light weight image compress framework for Android based on libjpeg"
3535
website = 'https://github.com/JavaNoober/Light'
3636
// gradlew clean build bintrayUpload -PbintrayUser=xiaoqiandroid -PbintrayKey=xxxxxxxxxxxxxxxx -PdryRun=false
+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
#Tue Nov 21 13:48:40 CST 2017
1+
#Wed Jun 12 14:36:51 CST 2019
22
distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip

0 commit comments

Comments
 (0)