简介:最近在做图片上传的相关功能,需要对图片的大小和尺寸进行压缩处理。
好处:(1)提升性能(2)节省流量
一、图片大小循环压缩
/**
* 压缩图片文件到指定大小
*
* @param filePath
*/
public static void compressBmpToFile(String filePath) {
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
if (null == bitmap) {
return;
}
final int BYTE_LEN = ;
//文件最大为200KB
final int MAX_FILE_SIZE = ;
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
int quality = ;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
while (baos.toByteArray().length / BYTE_LEN > MAX_FILE_SIZE) {
baos.reset();
quality -= ;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos);
float size = calculteBitmapSize(bitmap);
}
try {
final FileOutputStream fos = new FileOutputStream(new File(filePath));
fos.write(baos.toByteArray());
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 计算bitmap的大小
*
* @param bitmap
* @return bitmap的大小单位KB
*/
public static float calculteBitmapSize(Bitmap bitmap) {
if (null == bitmap) {
return f;
}
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, , baos);
final float size = (baos.toByteArray().length / );
try {
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return size;
}
二、图片尺寸压缩
/**
* 压缩图片的尺寸
*
* @param srcPath
* @return
*/
public static Bitmap compressImageFromFile(String srcPath) {
final BitmapFactory.Options newOpts = new BitmapFactory.Options();
//只读边,不读内容
newOpts.inJustDecodeBounds = true;
// 获取这个图片的宽和高,注意此处的bitmap为null
BitmapFactory.decodeFile(srcPath, newOpts);
newOpts.inJustDecodeBounds = false;
int w = newOpts.outWidth;
int h = newOpts.outHeight;
float hh = f;
float ww = f;
int be = ;
if (w > h && w > ww) {
be = (int) (newOpts.outWidth / ww);
} else if (w < h && h > hh) {
be = (int) (newOpts.outHeight / hh);
}
if (be <= ) {
be = ;
}
//设置采样率
newOpts.inSampleSize = be;
//该模式是默认的,可不设
newOpts.inPreferredConfig = Bitmap.Config.RGB_565;
// 同时设置才会有效
newOpts.inPurgeable = true;
//当系统内存不够时候图片自动被回收
newOpts.inInputShareable = true;
final Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
return bitmap;
}
三、Luban压缩
Github:Luban图片压缩
四、图片选择器
PictureSelector图片选择器