Android中的图片压缩

       有的时候我们需要一张很小的图片,但是原有的图片非常大,比如说头像等,这时候我们需要对图像进行压缩处理。把原先高分辨率的图片压缩到指定的大小。

       这里我们用到了两个类:BitmapFactory、BitmapFactory.Options。

不要忘记权限

代码:

1.封装成工具类FileUtils

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.Config;
import android.os.Environment;

public class FileUtils {
	//保存的路径
	public static String SPATH = Environment.getExternalStorageDirectory()+
			"/PHOTO_AB/";
	//保存(处理后的图片)的函数
	public static File saveBitmap(Bitmap bm,String picName){
		
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int option = 100;
		bm.compress(Bitmap.CompressFormat.JPEG, option, baos);
		FileOutputStream fos;
		File f = new File(SPATH+picName+".JPEG");
		if(f.exists()){
			f.delete();
		}
		try {
			fos = new FileOutputStream(f);
			fos.write(baos.toByteArray());
			fos.flush();
			fos.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}		
		return f;
	}
	
	public static Bitmap decodeSampleBitmapFromResource(String path,
			int reqWith,int reqHeight){
		//第一次解析将inJustDecodeBounds设置为true,来获取图片大小 
		BitmapFactory.Options options = new BitmapFactory.Options();
		options.inPreferredConfig = Config.RGB_565;
		options.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(path, options);
		//根据传入的宽和高,计算出和合适的inSampleSize的值
		options.inSampleSize = calInSampleSize(options,reqWith,reqHeight);
		//使用获取到的inSampleSize值再次解析图片
		options.inJustDecodeBounds = false;
		return BitmapFactory.decodeFile(path, options);
	}
	/**
	 * 根据传入的宽和高,计算出和合适的inSampleSize的值
	 * @param options
	 * @param reqWidth
	 * @param reqHeight
	 * @return
	 */
	public static int calInSampleSize(BitmapFactory.Options options,int reqWidth,
			int reqHeight){
		//源图片的高度和宽度
		int width = options.outWidth;
		int height = options.outHeight;
		int inSampleSize = 1;
		if(height>reqHeight || width>reqWidth){
			//计算出实际宽高和目标宽高的比例
			int heightRatio = Math.round((float)height/(float)reqHeight);
			int widthRatio = Math.round((float)width/(float)reqWidth);
			inSampleSize = heightRatio<widthRatio?heightRatio:widthRatio;
		}
		return inSampleSize;
	}
	private static boolean isFileExist(String fileName){
		File f = new File(SPATH + fileName);
		return f.exists();
	}
}

2.使用

File file = new File(capturePath);
//对图片进行预处理
Bitmap bitmap = FileUtils.decodeSampleBitmapFromResource(file.getAbsolutePath(), 100, 100);
file = FileUtils.saveBitmap(bitmap, file.getName());

这个我感觉理解也罢,不理解也罢。就是那么一个固定模式,固定方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值