MainActivity:
BitmapUtils:
MD5Utils:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
package
com.example.yasuo;
import
java.io.ByteArrayInputStream;
import
java.io.ByteArrayOutputStream;
import
java.text.SimpleDateFormat;
import
java.util.Date;
import
android.app.Activity;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.os.Bundle;
import
android.os.Environment;
import
android.util.Log;
public
class
MainActivity
extends
Activity {
final
String PATH = Environment.getExternalStorageDirectory()
+
"/Bst/a.jpg"
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private
void
init() {
try
{
getThumbUploadPath(PATH,
480
);
}
catch
(Exception e) {
Log.e(
"eeee"
, e.toString());
}
}
private
String getThumbUploadPath(String oldPath,
int
bitmapMaxWidth)
throws
Exception {
BitmapFactory.Options options =
new
BitmapFactory.Options();
options.inJustDecodeBounds =
true
;
BitmapFactory.decodeFile(oldPath, options);
int
height = options.outHeight;
int
width = options.outWidth;
int
reqHeight =
0
;
int
reqWidth = bitmapMaxWidth;
reqHeight = (reqWidth * height)/width;
// 在内存中创建bitmap对象,这个对象按照缩放大小创建的
options.inSampleSize = calculateInSampleSize(options, bitmapMaxWidth, reqHeight);
// System.out.println("calculateInSampleSize(options, 480, 800);==="
// + calculateInSampleSize(options, 480, 800));
options.inJustDecodeBounds =
false
;
Bitmap bitmap = BitmapFactory.decodeFile(oldPath, options);
//Log.e("asdasdas", "reqWidth->"+reqWidth+"---reqHeight->"+reqHeight);
Bitmap bbb = compressImage(Bitmap.createScaledBitmap(bitmap, bitmapMaxWidth, reqHeight,
false
));
String timeStamp =
new
SimpleDateFormat(
"yyyyMMdd_HHmmss"
)
.format(
new
Date());
return
BitmapUtils.saveImg(bbb, MD5Utils.md5(timeStamp));
}
private
int
calculateInSampleSize(BitmapFactory.Options options,
int
reqWidth,
int
reqHeight) {
// Raw height and width of image
final
int
height = options.outHeight;
final
int
width = options.outWidth;
int
inSampleSize =
1
;
if
(height > reqHeight || width > reqWidth) {
if
(width > height) {
inSampleSize = Math.round((
float
) height / (
float
) reqHeight);
}
else
{
inSampleSize = Math.round((
float
) width / (
float
) reqWidth);
}
}
return
inSampleSize;
}
private
Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos =
new
ByteArrayOutputStream();
image.compress(Bitmap.CompressFormat.JPEG,
80
, baos);
// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
int
options =
100
;
while
(baos.toByteArray().length /
1024
>
100
) {
// 循环判断如果压缩后图片是否大于100kb,大于继续压缩
options -=
10
;
// 每次都减少10
baos.reset();
// 重置baos即清空baos
image.compress(Bitmap.CompressFormat.JPEG, options, baos);
// 这里压缩options%,把压缩后的数据存放到baos中
}
ByteArrayInputStream isBm =
new
ByteArrayInputStream(baos.toByteArray());
// 把压缩后的数据baos存放到ByteArrayInputStream中
Bitmap bitmap = BitmapFactory.decodeStream(isBm,
null
,
null
);
// 把ByteArrayInputStream数据生成图片
return
bitmap;
}
}
|
BitmapUtils:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package
com.example.yasuo;
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
android.graphics.Bitmap;
import
android.os.Environment;
/**
* 将bitmap保存在SD卡
* @author xinruzhou
*
*/
public
class
BitmapUtils {
/**
*
* @param b Bitmap
* <a href="\"http://www.eoeandroid.com/home.php?mod=space&uid=7300\"" target="\"_blank\"">@return</a> 图片存储的位置
* @throws FileNotFoundException
*/
public
static
String saveImg(Bitmap b,String name)
throws
Exception{
String path = Environment.getExternalStorageDirectory().getPath()+File.separator+
"test/headImg/"
;
File mediaFile =
new
File(path + File.separator + name +
".jpg"
);
if
(mediaFile.exists()){
mediaFile.delete();
}
if
(!
new
File(path).exists()){
new
File(path).mkdirs();
}
mediaFile.createNewFile();
FileOutputStream fos =
new
FileOutputStream(mediaFile);
b.compress(Bitmap.CompressFormat.PNG,
100
, fos);
fos.flush();
fos.close();
b.recycle();
b =
null
;
System.gc();
return
mediaFile.getPath();
}
}
|
MD5Utils:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package
com.example.yasuo;
import
java.security.MessageDigest;
public
class
MD5Utils {
/**
* MD5加密
* @param str 要加密的字符串
* @return 加密后的字符串
*/
public
static
String md5(String str) {
MessageDigest md5 =
null
;
try
{
md5 = MessageDigest.getInstance(
"MD5"
);
}
catch
(Exception e) {
e.printStackTrace();
return
""
;
}
char
[] charArray = str.toCharArray();
byte
[] byteArray =
new
byte
[charArray.length];
for
(
int
i =
0
; i < charArray.length; i++) {
byteArray<i> = (
byte
) charArray<i>;
}
byte
[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue =
new
StringBuffer();
for
(
int
i =
0
; i < md5Bytes.length; i++) {
int
val = ((
int
) md5Bytes<i>) &
0xff
;
if
(val <
16
) {
hexValue.append(
"0"
);
}
hexValue.append(Integer.toHexString(val));
}
return
hexValue.toString();
}
}
</i></i></i>
|
就这么多~
转自:http://www.eoeandroid.com/thread-310706-1-1.html