/**
* 压缩图片
* @param inFile 输入文件 到文件
* @param outFile 输出目录 到目录
*/
private void compressImage(String inFile,String outFile){
int limt = 400;//最大宽高限制
String[] splitIn = inFile.split(File.separator);
String[] splitinFile = splitIn[splitIn.length-1].split("\\.");
String fileName = splitinFile[splitinFile.length-2];
String fileFormat = splitinFile[splitinFile.length-1];
Bitmap inBitmap = getBitmap(inFile, inFile.endsWith("png"));
int height = inBitmap.getHeight();
int width = inBitmap.getWidth();
boolean isNeedCompress = Math.max(height, width) > limt;
if(isNeedCompress){
//压缩
float ration = (float)limt / Math.max(height, width);
Bitmap outBitmap = zoomImg(inBitmap, ration);
inBitmap.recycle();
inBitmap = null;
System.gc();
String outImage = saveBitmap(outBitmap, outFile + fileName + "." + fileFormat, inFile.endsWith("png"));
Log.e(TAG, "compressImage: "+outImage );
}else{
//输出保存
String outImage = saveBitmap(inBitmap, outFile + fileName + "." + fileFormat, inFile.endsWith("png"));
Log.e(TAG, "compressImage: "+outImage );
}
}
/**
* 获得Bitmap
* @param imgPath
* @param isPng
* @return
*/
public Bitmap getBitmap(String imgPath,boolean isPng) {
BitmapFactory.Options newOpts = new BitmapFactory.Options();
newOpts.inJustDecodeBounds = false;
newOpts.inPurgeable = true;
newOpts.inInputShareable = true;
newOpts.inSampleSize = 1;
newOpts.inPreferredConfig = isPng ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;
return BitmapFactory.decodeFile(imgPath, newOpts);
}
/**
* 压缩Bitmap
* @param bm
* @param f
* @return
*/
public Bitmap zoomImg(Bitmap bm, float f) {
int width = bm.getWidth();
int height = bm.getHeight();
float scaleWidth = f;
float scaleHeight = f;
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap newbm = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true);
return newbm;
}
/**
* 保存Bitmap
* @param bm
* @param savePath
* @param isPng
* @return
*/
public String saveBitmap(Bitmap bm, String savePath,boolean isPng) {
Log.e(TAG, "saveBitmap: ispng"+ isPng );
File f = new File(savePath);
if (f.exists()) {
f.delete();
}
try {
FileOutputStream out = new FileOutputStream(f);
bm.compress(isPng ? Bitmap.CompressFormat.PNG : Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
bm.recycle();
bm = null;
System.gc();
return savePath;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
Android 图片压缩
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 引言:太多的图片会增加服务器的压力,而目前用户的手机像素越来越高,图片的体积也越来越大,动则5-10多M,而当项目...
- 原谅我的抄袭,我只是怕原作者把文件删了,或者别的问题,导致我以后无法查看,所以自己再写一遍源文件链接:http:/...
- 1. 概述 我们在开发的过程中,肯定很多项目都需要上传图片文件,我们往往都是直接上传,相信很多都并未对其做过压缩。...
- 1. 概述 上一期已讲到Android图片压缩加密上传 - JPEG压缩算法解析,我们不打算采用BitmapFac...
- 如题,多种压缩方式常用的有尺寸压缩、质量压缩以及通过JNI调用libjpeg库来进行压缩,三种方式结合使用实现指定...