引言
由于现在手机像素越来越高,800万像素的手机,拍出来的照片就有2M左右,这么大的图片,如果用来直接显示的话,只要多几张,很容易就会发生OOM,但是用Thumbnail的话又不够清晰,所以需要对图片进行压缩之后在进行上传或显示。
对图片压缩并上传分三个部分:
第一,计算图片的缩放值,就是计算BitmapFactory.Options中的inSampleSize值,inSampleSize是用来控制缩放的.代码如下:
|
|
问题是options.outHeight和options.outWidth是怎么来的呢?
其实很简单,只要将BitmapFactory.Options的inJustDecodeBounds设置为true,就可以不把图片加载到内存中,也能测量出其大小。代码如下:
|
|
第二,decode获得bitmap,根据上面的讨论,现在可以根据图片路径获得图片并进行缩放;
|
|
如果只是显示的话,到这一步就够了,但是往往还要上传,这就是第三步要讨论的问题;
第三,指定压缩质量,然后按某种编码方式将其编码成String之后上传,这里以常用的JPEG压缩以及Base64编码方式为例;
|
|
以上.