- 细节调整,利用
matrix.scale
每次缩小为原来的0.9
,循环逼近目标大小。
计算原始宽高
这里就是最基本的方法,但是因为流程的完整,还是记录下。
public static Size getBitmapSize(String filePath) {
// 仅获取宽高
BitmapFactory.Options options = new BitmapFactory.Options();
// 该属性设置为 true 只会加载图片的边框进来,并不会加载图片具体的像素点
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// 获得原图的宽和高
int outWidth = options.outWidth;
int outHeight = options.outHeight;
return new Size(outWidth, outHeight);
}
计算近似宽高
首先说一下为什么要有这一步:
- 为了尽量少的占用内存,我们获取的图片只是用来在打开微信时展现一个缩略图,而实际的图片大小是无法预估的,不能盲目拿到内存中,因此我们要先计算一个大致的尺寸;
- 最后一步中,我们将会采用循环压缩的方式逼近目标大小,先进行这步压缩,也是为了减少最后循环的次数;
这一步骤的目标就是获取到一个稍微大于 32KB
的图片,后面再进行细节微调。
那么接