思路:不管用拍照还是选择本地,要获取一个路径,然后压缩最后,在用流数据本地成一个压缩的新图片,在上传新的图片,删除本地图片文件
/**递归删除目录下的所有文件及子目录下所有文件 */
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();//递归删除目录中的子目录下
for (int i=0; i<children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
} // 目录此时为空,可以删除
return dir.delete();
}
/**
* 上传图片压缩图片
*/
public static RequestParams compressionImage(List<ImageItem> itemList){
File savePath = new File(ComConfig.saveDirTemp);
if (savePath.exists()) {
deleteDir(savePath);
}
savePath.mkdirs();
RequestParams map=new RequestParams();
for(int i=0;i<itemList.size();i++){
BitmapFactory.Options opt=new BitmapFactory.Options();
opt.inJustDecodeBounds=true;
Bitmap bitmap=BitmapFactory.decodeFile(itemList.get(i).getImagePath(), opt);
int bitWidth = opt.outWidth;
int bitHeight = opt.outHeight;
int be=1;
if(bitWidth>1024||bitHeight>1024){
if (bitWidth < bitHeight) {
// 高度大于宽度
be = bitHeight/1024;
} else {
// 宽度大于高度
be = bitWidth/1024;
}
}
opt.inJustDecodeBounds=false;
opt.inSampleSize=be;
ByteArrayOutputStream baos=new ByteArrayOutputStream();
try {
bitmap=BitmapFactory.decodeFile(itemList.get(i).getImagePath(),opt);
bitmap.compress(CompressFormat.JPEG, 100, baos);
} catch (OutOfMemoryError e) {
opt.inSampleSize = be + 2;
bitmap=BitmapFactory.decodeFile(itemList.get(i).getImagePath(),opt);
bitmap.compress(CompressFormat.JPEG, 80, baos);
}
// InputStream is = new ByteArrayInputStream(baos.toByteArray());
String im=ComConfig.saveDirTemp+i+".jpg";
File newFile=new File(ComConfig.saveDirTemp,i+".jpg");//path,i+".png"
newFile.delete();
if (!newFile.exists()) {
try {
newFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
FileOutputStream newimage = new FileOutputStream(im);
newimage.write(baos.toByteArray());
newimage.close();
map.put("img"+i,newFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return map;
}