预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共16页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Android中图片压缩方案详解 1、质量压缩法 设置bitmapoptions属性,降低图片的质量,像素不会减少 第一个参数为需要压缩的bitmap图片对象,第二个参数为压缩后图片保存的位置 设置options属性0-100,来实现压缩。 privateBitmapcompressImage(Bitmapimage){ ByteArrayOutputStreambaos=newByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 intoptions=100; while(baos.toByteArray().length/1024>100){//循环判断如果压缩后图片是否大于100kb,大于继续压缩 baos.reset();//重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中 options-=10;//每次都减少10 } ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中 Bitmapbitmap=BitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片 returnbitmap; } 质量压缩不会减少图片的像素。它是在保持像素不变的前提下改变图片的位深及透明度等,来达到压缩图片的目的。进过它压缩的图片文件大小会有改变,但是导入成bitmap后占得内存是不变的。因为要保持像素不变,所以它就无法无限压缩,到达一个值之后就不会继续变小了。显然这个方法并不适用于缩略图,其实也不适用于想通过压缩图片减少内存的适用,仅仅适用于想在保证图片质量的同时减少文件大小的情况而已。 2、采样率压缩法 privateBitmapgetimage(StringsrcPath){ BitmapFactory.OptionsnewOpts=newBitmapFactory.Options(); //开始读入图片,此时把options.inJustDecodeBounds设回true了 newOpts.inJustDecodeBounds=true; Bitmapbitmap=BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空 newOpts.inJustDecodeBounds=false; intw=newOpts.outWidth; inth=newOpts.outHeight; //现在主流手机比较多是1280*720分辨率,所以高和宽我们设置为 floathh=1280f;//这里设置高度为1280f floatww=720f;//这里设置宽度为720f //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可 intbe=1;//be=1表示不缩放 if(w>h&&w>ww){//如果宽度大的话根据宽度固定大小缩放 be=(int)(newOpts.outWidth/ww); }elseif(w<h&&h>hh){//如果高度高的话根据宽度固定大小缩放 be=(int)(newOpts.outHeight/hh); } if(be<=0) be=1; newOpts.inSampleSize=be;//设置缩放比例 //重新读入图片,注意此时已经把options.inJustDecodeBounds设回false了 bitmap=BitmapFactory.decodeFile(srcPath,newOpts); returncompressImage(bitmap);//压缩好比例大小后再进行质量压缩 } 这个方法的好处是大大的缩小了内存的使用,在读存储器上的图片时,如果不需要高清的效果,可以先只读取图片的边,通过宽和高设定好取样率后再加载图片,这样就不会过多的占用内存。 3、缩放法 通过缩放图片像素来减少图片占用内存大小。 +方式一 publicstaticvoidcompressBitmapToFile(Bitmapbmp,Filefile){ //尺寸压缩倍数,值越大,图片尺寸越小 intratio=2; //压缩Bitmap到对应尺寸 Bitmapresult=Bitmap.cre