加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Android图片压缩

发布时间:2020-12-14 23:28:30 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 private?Bitmap?compressImage(Bitmap?image)?{??ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();??//质量压缩方法,这里100表示不压缩,

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

private?Bitmap?compressImage(Bitmap?image)?{
??ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();
??//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
??image.compress(Bitmap.CompressFormat.JPEG,?100,?baos);?
??int?options?=?100;
??while?(?baos.toByteArray().length?/?1024>100)?{?//循环判断如果压缩后图片是否大于100kb,大于继续压缩??
???baos.reset();//重置baos即清空baos
???//这里压缩options%,把压缩后的数据存放到baos中
???image.compress(Bitmap.CompressFormat.JPEG,?options,?baos);?
???options?-=?10;//每次都减少10
??}
??//把压缩后的数据baos存放到ByteArrayInputStream中?
??ByteArrayInputStream?isBm?=?new?ByteArrayInputStream(baos.toByteArray());
??Bitmap?bitmap?=?BitmapFactory.decodeStream(isBm,?null,?null);//把ByteArrayInputStream数据生成图片
??return?bitmap;
?}
private?Bitmap?getimage(String?srcPath)?{

??BitmapFactory.Options?newOpts?=?new?BitmapFactory.Options();

??//开始读入图片,此时把options.inJustDecodeBounds?设回true了

??newOpts.inJustDecodeBounds?=?true;//只读边,不读内容
??Bitmap?bitmap?=?BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空

??newOpts.inJustDecodeBounds?=?false;
??int?w?=?newOpts.outWidth;
??int?h?=?newOpts.outHeight;
??//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
??float?hh?=?800f;//这里设置高度为800f
??float?ww?=?480f;//这里设置宽度为480f

??//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
??int?be?=?1;//be=1表示不缩放
??if?(w?>?h?&&?w?>?ww)?{//如果宽度大的话根据宽度固定大小缩放
???be?=?(int)?(newOpts.outWidth?/?ww);
??}?else?if?(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);
??return?compressImage(bitmap);//压缩好比例大小后再进行质量压缩

?}
?private?Bitmap?comp(Bitmap?image)?{

??ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();??
??image.compress(Bitmap.CompressFormat.JPEG,?baos);
??if(?baos.toByteArray().length?/?1024>1024)?{//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出?

???baos.reset();//重置baos即清空baos

???image.compress(Bitmap.CompressFormat.JPEG,?50,?baos);//这里压缩50%,把压缩后的数据存放到baos中

??}

??ByteArrayInputStream?isBm?=?new?ByteArrayInputStream(baos.toByteArray());

??BitmapFactory.Options?newOpts?=?new?BitmapFactory.Options();

??//开始读入图片,此时把options.inJustDecodeBounds?设回true了

??newOpts.inJustDecodeBounds?=?true;

??Bitmap?bitmap?=?BitmapFactory.decodeStream(isBm,?newOpts);

??newOpts.inJustDecodeBounds?=?false;

??int?w?=?newOpts.outWidth;

??int?h?=?newOpts.outHeight;

??//现在主流手机比较多是800*480分辨率,所以高和宽我们设置为

??float?hh?=?800f;//这里设置高度为800f

??float?ww?=?480f;//这里设置宽度为480f

??//缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可

??int?be?=?1;//be=1表示不缩放

??if?(w?>?h?&&?w?>?ww)?{//如果宽度大的话根据宽度固定大小缩放

???be?=?(int)?(newOpts.outWidth?/?ww);

??}?else?if?(w?<?h?&&?h?>?hh)?{//如果高度高的话根据宽度固定大小缩放

???be?=?(int)?(newOpts.outHeight?/?hh);

??}

??if?(be?<=?0)

???be?=?1;

??newOpts.inSampleSize?=?be;//设置缩放比例

??//重新读入图片,注意此时已经把options.inJustDecodeBounds?设回false了

??isBm?=?new?ByteArrayInputStream(baos.toByteArray());

??bitmap?=?BitmapFactory.decodeStream(isBm,?newOpts);

??return?compressImage(bitmap);//压缩好比例大小后再进行质量压缩

?}

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读