Android开发实现图片大小与质量压缩及保存

2022-05-05 09:15:28
目录
android中图片有四种属性
Android目前常用图片格式
使用
大小压缩
质量压缩
混合方式压缩
采样率压缩
图片保存到本地

Android中图片有四种属性

ALPHA_8:每个像素占用1byte内存

ARGB_4444:每个像素占用2byte内存

ARGB_8888:每个像素占用4byte内存>

RGB_565:每个像素占用2byte内存

Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。所以在对图片效果不是特别高的情况下使用RGB_565(565没有透明度属性)

Android目前常用图片格式

有png,jpeg和webp

png:无损压缩图片格式,支持Alpha通道,Android切图素材多采用该格式

jpeg:有损压缩图片格式,不支持背景透明,适用于照片等色彩丰富的(大图压缩,不适合logo)

webp:是一种同时提供了有损压缩和无损压缩的图片格式,派生自视频编码格式VP8,从谷歌官网来看,无损webp平均比png小26%,有损的webp平均比jpeg小25%~34%,无损webp支持Alpha通道,有损webp在一定的条件下同样支持,有损webp在Android4.0(API>

使用

大小压缩

private>

质量压缩

注意:

第二次压缩之前都要先清空>

image.compress(Bitmap.CompressFormat.JPEG, quality, baos);

有时候我们采用质量压缩没有效果,有可能是每次压缩的质量过小,所以我们可以尝试修改压缩质量(quality)是10;

quality压缩机提示,0-100。0表示压缩小尺寸,100意味着最大质量的压缩。一些格式,如无损的PNG,将忽略质量设定;

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

混合方式压缩

private>

采样率压缩

采样率压缩是通过设置BitmapFactory.Options.inSampleSize,来减小图片的分辨率,进而减小图片所占用的磁盘空间和内存大小。

设置的inSampleSize会导致压缩的图片的宽高都为1/inSampleSize,整体大小变为原始图片的inSampleSize平方分之一,当然,这些有些注意点:

1、inSampleSize小于等于1会按照1处理
2、inSampleSize只能设置为2的平方,不是2的平方则最终会减小到最近的2的平方数,如设置7会按4进行压缩,设置15会按8进行压缩。
/** >

图片保存到本地

>h(); fos.close(); } catch (IOException e) { e.printStackTrace(); return null; } return filePic.getAbsolutePath(); }

以上就是Android开发实现图片大小与质量压缩及保存的详细内容,更多关于Android开发图片大小质量压缩保存的资料请关注我们其它相关文章!