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】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |