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