Android(安卓)压缩工具类
16lz
2021-01-24
/***压缩图片,等比例压缩手机宽高,大小不超过200KB,如果图片本身大小不超过200KB就不压缩*@paramcontext*@parambitmap*@return*/publicstaticBitmapcompressBitmap(Contextcontext,Bitmapbitmap){ByteArrayOutputStreambaos=newByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里10表示不压缩,把压缩后的数据存放到baos中byte[]b=baos.toByteArray();//将字节换成KBdoublemid=b.length/1024;//图片允许最大空间单位:KBdoublemaxSize=200.00;if(mid>maxSize){BitmapimgBitmap=compressBitmap(b,ScreenTools.getInstance(context).getScreenWidth(),ScreenTools.getInstance(context).getScreenHeight());imgBitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里10表示不压缩,把压缩后的数据存放到baos中byte[]tb=baos.toByteArray();//将字节换成KBdoublemidk=tb.length/1024;if(midk>maxSize){intoptions=100;while(mid>maxSize&&options/3>0){//循环判断如果压缩后图片是否大于10kb,大于继续压缩baos.reset();//重置baos即清空baosimgBitmap.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中options-=options/3;//每次都减少20%}ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中returnBitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片}returnimgBitmap;}returnbitmap;}/***压缩图片,等比例压缩手机宽高,大小不超过200KB*@paramcontext*@parampath*@return*/publicstaticBitmapcompressBitmap(Contextcontext,Stringpath){Bitmapbitmap=compressBitmap(path,ScreenTools.getInstance(context).getScreenWidth(),ScreenTools.getInstance(context).getScreenHeight());ByteArrayOutputStreambaos=newByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);//质量压缩方法,这里10表示不压缩,把压缩后的数据存放到baos中byte[]b=baos.toByteArray();//将字节换成KBdoublemid=b.length/1024;//图片允许最大空间单位:KBdoublemaxSize=200.00;if(mid>maxSize){intoptions=100;while(mid>maxSize&&options/3>0){//循环判断如果压缩后图片是否大于10kb,大于继续压缩baos.reset();//重置baos即清空baosbitmap.compress(Bitmap.CompressFormat.JPEG,options,baos);//这里压缩options%,把压缩后的数据存放到baos中options-=options/3;//每次都减少30%}ByteArrayInputStreamisBm=newByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中returnBitmapFactory.decodeStream(isBm,null,null);//把ByteArrayInputStream数据生成图片}returnbitmap;}/****@paramoptions*@paramrqsW*@paramrqsH*@return*/publicfinalstaticintcaculateInSampleSize(Optionsoptions,intrqsW,intrqsH){finalintheight=options.outHeight;finalintwidth=options.outWidth;intinSampleSize=1;if(height>rqsH||width>rqsW){finalintheightRatio=Math.round((float)height/(float)rqsH);finalintwidthRatio=Math.round((float)width/(float)rqsW);inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio;}returninSampleSize;}/***@parampathbitmapsourcepath*@paramrqsW*@paramrqsH*@returnBitmap{@linkBitmap}*/publicfinalstaticBitmapcompressBitmap(Stringpath,intrqsW,intrqsH){finalOptionsoptions=newOptions();options.inJustDecodeBounds=true;BitmapFactory.decodeFile(path,options);options.inSampleSize=caculateInSampleSize(options,rqsW,rqsH);options.inJustDecodeBounds=false;returnBitmapFactory.decodeFile(path,options);}/***@parambts*@paramreqsW*@paramreqsH*@return*/publicfinalstaticBitmapcompressBitmap(byte[]bts,intreqsW,intreqsH){finalOptionsoptions=newOptions();options.inJustDecodeBounds=true;BitmapFactory.decodeByteArray(bts,0,bts.length,options);options.inSampleSize=caculateInSampleSize(options,reqsW,reqsH);options.inJustDecodeBounds=false;returnBitmapFactory.decodeByteArray(bts,0,bts.length,options);}
更多相关文章
- Android(安卓)-- PullToRefresh应用
- Android中的GalleryView实例演示-周末福利有美女图
- ViewPager用法(一)图片+原点+循环播放
- Android(安卓)设置TextView滑动滚动条和滑动效果
- 锦囊篇|一文摸懂RxJava
- RelativeLayout布局属性详解
- android实现xml数据的解析
- Android两种 旋转Bitmap方法
- Android多点触摸缩放图片-android学习之旅(四)