/**
* 压缩图片
* @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库来进行压缩,三种方式结合使用实现指定...