安卓中对图片的缩放处理

1.质量压缩
2.采样率压缩
3.缩放法压缩(martix)
4.RGB_565法
5.createScaledBitmap

在进行图片压缩处理前,我们需要先明白图片相关的一个重要概念:图片的表示方式,通常的表示方式包括以下几种。
这里写图片描述

一个图片占用内存大小:图片长度 x 图片宽度 x 一个像素点占用的字节数 。

1.质量压缩

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
int quality = bit.compress(CompressFormat.JPEG, quality, baos);
Baos.flush();
Baos.close();

此种操作图片的长,宽,像素都不变,那么bitmap所占内存大小是不会变的,但是我们看到bytes.length是随着quality变小而变小的。这样适合去传递二进制的图片数据,比如微信分享图片,要传入二进制数据过去,限制32kb之内。
如果是bit.compress(CompressFormat.PNG, quality, baos);这样的png格式,quality就没有作用了,bytes.length不会变化,因为png图片是无损的,不能进行压缩。
CompressFormat.WEBP格式,该格式是google自己推出来一个图片格式

2.采样率压缩

String filePath= mPhotoPath.getAbsolutePath();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath,options);
options.inSampleSize = calculateInSampleSize(options,reqWidth);
options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeFile(filePath,options);

设置inSampleSize的值(int类型)后,假如设为2,则宽和高都为原来的1/2,宽高都减少了,自然内存也降低了,采样率压缩,是因为配合inJustDecodeBounds,先获取图片的宽、高【这个过程就是取样】,然后通过获取的宽高,动态的设置inSampleSize的值。

当inJustDecodeBounds设置为true的时候,BitmapFactory通过decodeResource或者decodeFile解码图片时,将会返回空(null)的Bitmap对象,这样可以避免Bitmap的内存分配,但是它可以返回Bitmap的宽度、高度以及MimeType。

3.缩放法压缩(martix)

matrix.setScale(0.5f, 0.5f); 
bm = Bitmap.createBitmap(bit, 0, 0, bit.getWidth(), bit.getHeight(), matrix, true);

例如上面设置为0.5,那么bitmap的长度和宽度分别缩小了一半,图片大小缩小了四分之一,
我们看到图片大小直接缩小了一半,长度和宽度也没有变,相比压缩前减少了一半的内存。

4.RGB_565法

BitmapFactory.Options options2 = new BitmapFactory.Options(); 
options2.inPreferredConfig = Bitmap.Config.RGB_565;
 bm = BitmapFactory.decodeFile(filepath);

该方法是通过图片所占的位数减少由RGB_8888的每个像素占4位,修改为占2位,实现对图片内存的压缩,因此该方法实际使用受限比较严重。

5. createScaledBitmap

bm = Bitmap.createScaledBitmap(bit, 150, 150, true);

这里是将图片压缩成用户所期望的长度和宽度,但是这里要说,如果用户期望的长度和宽度和原图长度宽度相差太多的话,图片会很不清晰,而且容易导致图片变形。

总结:
对于图片的压缩的来源总体还是通过下面这个公式:

图片长度 x 图片宽度 x 一个像素点占用的字节数

压缩的来源也是三种方式处理:
①保证像素所占位数的前提下,压缩图片的长宽,但容易导致像素变形;
②:保证长宽的前提下,改变像素的占位,但容易导致像素模糊;
③:对于这两点同时处理,但要注意压缩后的图片效果。

猜你喜欢

转载自blog.csdn.net/xk7298/article/details/81605274
今日推荐