压缩图片工具类(在保证图片清晰度的情况下 尽可能的压缩图片的大小)

倒入类库 

compile 'me.shaohui.advancedluban:library:1.3.1'


封装的工具类
package com.wisdomschool.stu.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;

import com.wisdomschool.stu.presenter.MyTask;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import me.shaohui.advancedluban.Luban;
import me.shaohui.advancedluban.OnCompressListener;
import me.shaohui.advancedluban.OnMultiCompressListener;

/**
* Created by zhangyanjiao
* on 16/12/21
* name 压缩指定大小的图片
*/
public class ImgCompressUtils {
private static ImgCompressUtils imgCompressUtils = new ImgCompressUtils();

private ImgCompressUtils() {
}

public static ImgCompressUtils getInstance() {
return imgCompressUtils;
}

public void compress(final Context context, int maxSize, final List<String> photoPathList, final CompressFinishCallBack callBack) {
if ((photoPathList == null || photoPathList.size() == 0) && callBack != null) {
callBack.compressFinish(null);
return;
}
final long startTime = System.currentTimeMillis();
if (photoPathList != null && photoPathList.size() > 0) {
List<File> tempFiles = new ArrayList<>();
for (int i = 0; i < photoPathList.size(); i++) {
tempFiles.add(new File(photoPathList.get(i)));
}

Luban.compress(context, tempFiles)
.putGear(Luban.CUSTOM_GEAR)
.setMaxSize(maxSize)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.launch(new OnMultiCompressListener() {

@Override
public void onStart() {
if (callBack != null)
callBack.compressStart("开始压缩图片");
}

@Override
public void onSuccess(List<File> fileList) {
if (callBack != null)
callBack.compressFinish(fileList);
final long finishTime = System.currentTimeMillis();
LogUtils.e("压缩时间:" + (finishTime - startTime) / 1000);
}

@Override
public void onError(Throwable e) {
if (callBack != null)
callBack.compressError("部分文件不存在或已被删除");
}

});
}
}

/**
* 压缩单张图片
*
* @param context
* @param maxSize
* @param photoPath
* @param callBack
*/

public void compress(final Context context, int maxSize, final String photoPath, final CompressFinishCallBack callBack) {
if (TextUtils.isEmpty(photoPath)) {
callBack.compressFinish(null);
return;
}
final long startTime = System.currentTimeMillis();
Luban.compress(context, new File(photoPath))
.putGear(Luban.CUSTOM_GEAR)
.setMaxSize(maxSize)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.launch(new OnCompressListener() {

@Override
public void onStart() {
if (callBack != null)
callBack.compressStart("开始压缩图片");
}

@Override
public void onSuccess(File fileList) {
callBack.compressFinish(fileList);
final long finishTime = System.currentTimeMillis();
LogUtils.e("压缩时间:" + (finishTime - startTime) / 1000);
}

@Override
public void onError(Throwable e) {
if (callBack != null)
callBack.compressError("压缩图片失败");
}

});
}

/**
* 图片压缩完毕 删除压缩的文件
*
* @param files
*/
public void delFile(final Map<String, File> files, final DelComPressCallBack callBack) {
if (files == null || files.size() <= 0)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
for (String key : files.keySet()) {
if (files.get(key).exists())
if (!files.get(key).delete())
callBack.fail();

}
callBack.success();
}
});
}

public void delFile(final Map<String, File> files) {
if (files == null || files.size() <= 0)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
for (String key : files.keySet()) {
if (files.get(key).exists())
files.get(key).delete();
}
}
});
}

public void delFile(final File files, final DelComPressCallBack callBack) {
if (files == null)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
if (!files.delete())
callBack.fail();
callBack.success();
}
});
}

public void delFile(final File files) {
if (files == null)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
files.delete();
}
});
}

public interface CompressFinishCallBack<T> {
/**
* 开始压缩图片
*
* @param msg 提示
*/
void compressStart(String msg);

/**
* 图片压缩完成
*
* @param files
*/
void compressFinish(T files);

/**
* 图片压缩失败
*
* @param msg 提示
*/
void compressError(String msg);
}

public interface DelComPressCallBack {
void success();

void fail();
}
}

使用方法
使用工具类 ImgCompressUtils
使用方法
ImgCompressUtils.getInstance().compress(context, 300, photoPathList, files, new ImgCompressUtils.CompressFinishCallBack() {
@Override
public void compressStart(String msg) {
LogUtils.i(msg);
context.showMsg(msg);
}

@Override
public void compressFinish(List<File> files) {
Map<String, File> compressFiles = new HashMap<String, File>();
if (files != null && files.size() > 0) {
LogUtils.i("压缩完图片集合为:");
context.showMsg("图片压缩完成");

for (File temp : files) {
LogUtils.i("图片大小:" + temp.length() / 1000 + "K");
compressFiles.put(temp.getAbsolutePath(), temp);
}
context.showMsg("图片开始上传");
LogUtils.e("图片开始上传");
}
//上传数据
}

@Override
public void compressError(String msg) {
LogUtils.i(msg);
context.showMsg(msg);
}
});

//上传数据成功回调(删除压缩的图片)
方式一:
ImgCompressUtils.getInstance().delFile(compressFiles, new ImgCompressUtils.DelComPressCallBack() {
@Override
public void success() {
LogUtils.i("删除成功");
}

@Override
public void fail() {
LogUtils.i("删除失败");
}
});
方式二:
ImgCompressUtils.getInstance().delFile(compressFiles);
封装的工具类
package com.wisdomschool.stu.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.text.TextUtils;

import com.wisdomschool.stu.presenter.MyTask;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import me.shaohui.advancedluban.Luban;
import me.shaohui.advancedluban.OnCompressListener;
import me.shaohui.advancedluban.OnMultiCompressListener;

/**
* Created by zhangyanjiao
* on 16/12/21
* name 压缩指定大小的图片
*/
public class ImgCompressUtils {
private static ImgCompressUtils imgCompressUtils = new ImgCompressUtils();

private ImgCompressUtils() {
}

public static ImgCompressUtils getInstance() {
return imgCompressUtils;
}

public void compress(final Context context, int maxSize, final List<String> photoPathList, final CompressFinishCallBack callBack) {
if ((photoPathList == null || photoPathList.size() == 0) && callBack != null) {
callBack.compressFinish(null);
return;
}
final long startTime = System.currentTimeMillis();
if (photoPathList != null && photoPathList.size() > 0) {
List<File> tempFiles = new ArrayList<>();
for (int i = 0; i < photoPathList.size(); i++) {
tempFiles.add(new File(photoPathList.get(i)));
}

Luban.compress(context, tempFiles)
.putGear(Luban.CUSTOM_GEAR)
.setMaxSize(maxSize)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.launch(new OnMultiCompressListener() {

@Override
public void onStart() {
if (callBack != null)
callBack.compressStart("开始压缩图片");
}

@Override
public void onSuccess(List<File> fileList) {
if (callBack != null)
callBack.compressFinish(fileList);
final long finishTime = System.currentTimeMillis();
LogUtils.e("压缩时间:" + (finishTime - startTime) / 1000);
}

@Override
public void onError(Throwable e) {
if (callBack != null)
callBack.compressError("部分文件不存在或已被删除");
}

});
}
}

/**
* 压缩单张图片
*
* @param context
* @param maxSize
* @param photoPath
* @param callBack
*/

public void compress(final Context context, int maxSize, final String photoPath, final CompressFinishCallBack callBack) {
if (TextUtils.isEmpty(photoPath)) {
callBack.compressFinish(null);
return;
}
final long startTime = System.currentTimeMillis();
Luban.compress(context, new File(photoPath))
.putGear(Luban.CUSTOM_GEAR)
.setMaxSize(maxSize)
.setCompressFormat(Bitmap.CompressFormat.JPEG)
.launch(new OnCompressListener() {

@Override
public void onStart() {
if (callBack != null)
callBack.compressStart("开始压缩图片");
}

@Override
public void onSuccess(File fileList) {
callBack.compressFinish(fileList);
final long finishTime = System.currentTimeMillis();
LogUtils.e("压缩时间:" + (finishTime - startTime) / 1000);
}

@Override
public void onError(Throwable e) {
if (callBack != null)
callBack.compressError("压缩图片失败");
}

});
}

/**
* 图片压缩完毕 删除压缩的文件
*
* @param files
*/
public void delFile(final Map<String, File> files, final DelComPressCallBack callBack) {
if (files == null || files.size() <= 0)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
for (String key : files.keySet()) {
if (files.get(key).exists())
if (!files.get(key).delete())
callBack.fail();

}
callBack.success();
}
});
}

public void delFile(final Map<String, File> files) {
if (files == null || files.size() <= 0)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
for (String key : files.keySet()) {
if (files.get(key).exists())
files.get(key).delete();
}
}
});
}

public void delFile(final File files, final DelComPressCallBack callBack) {
if (files == null)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
if (!files.delete())
callBack.fail();
callBack.success();
}
});
}

public void delFile(final File files) {
if (files == null)
return;
MyTask.runInBackground(true, new Runnable() {
@Override
public void run() {
files.delete();
}
});
}

public interface CompressFinishCallBack<T> {
/**
* 开始压缩图片
*
* @param msg 提示
*/
void compressStart(String msg);

/**
* 图片压缩完成
*
* @param files
*/
void compressFinish(T files);

/**
* 图片压缩失败
*
* @param msg 提示
*/
void compressError(String msg);
}

public interface DelComPressCallBack {
void success();

void fail();
}

}




使用工具类 ImgCompressUtils
使用方法
ImgCompressUtils.getInstance().compress(context, 300, photoPathList, files, new ImgCompressUtils.CompressFinishCallBack() {
@Override
public void compressStart(String msg) {
LogUtils.i(msg);
context.showMsg(msg);
}

@Override
public void compressFinish(List<File> files) {
Map<String, File> compressFiles = new HashMap<String, File>();
if (files != null && files.size() > 0) {
LogUtils.i("压缩完图片集合为:");
context.showMsg("图片压缩完成");

for (File temp : files) {
LogUtils.i("图片大小:" + temp.length() / 1000 + "K");
compressFiles.put(temp.getAbsolutePath(), temp);
}
context.showMsg("图片开始上传");
LogUtils.e("图片开始上传");
}
//上传数据
}

@Override
public void compressError(String msg) {
LogUtils.i(msg);
context.showMsg(msg);
}
});

//上传数据成功回调(删除压缩的图片)
方式一:
ImgCompressUtils.getInstance().delFile(compressFiles, new ImgCompressUtils.DelComPressCallBack() {
@Override
public void success() {
LogUtils.i("删除成功");
}

@Override
public void fail() {
LogUtils.i("删除失败");
}
});
方式二:
ImgCompressUtils.getInstance().delFile(compressFiles);

猜你喜欢

转载自blog.csdn.net/youth_never_go_away/article/details/53945332
今日推荐