您的位置:首页 > 移动开发 > Android开发

Android中关于图片压缩的小结

2016-07-28 11:18 393 查看
Android中如何进行图片压缩处理

一、我遇到的问题

工作中遇到的问题,有天领导让我把工程中所有需要上传图片的部分都要进行优化,把图片压缩后上传。我上网查了下发现有两种方式。一、质量压缩二、尺寸压缩

二、网上的错误之处

关于这两个压缩的具体定义我就不多描述了,但是我查阅资料的时候发现网上好多文章都存在误解。大多数就认为先进行尺寸压缩后再进行质量压缩,后一步是无效。其实,这个说法是错误的,我为什么这样说呢?因为就算是先进行尺寸压缩再进行质量压缩也是有效的。

三、Android中图片的存在形式。

一、文件形式(即以二进制形式存于硬盘上)二、流的形式三、bitmap形式。三种形式的区别:文件和流的形式对图片体积大小并没有影响,也就是说,如果你手机SD卡上的如果是100K,那么通过流的形式都到内存也是100K。但是当图片以bitmap形式存在时,其占用的内存会瞬间变大。这也就造成了当进行质量压缩后return bitmap形式后觉得压缩无效的错觉。重点就在于你return的是bitmap!

四、下面贴出我写的图片压缩代码(用了两种压缩方式)

public
class BitmapCompress {

public
static byte[] BitmapCompressToString(String srcPath) {

Bitmap bmp = compressImageFromFile(srcPath);

ByteArrayOutputStream baos =
new ByteArrayOutputStream();

bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);

int options = 100;

while (baos.toByteArray().length / 1024 > 150) {

options -= 10;// 每次都减少10

// 循环判断如果压缩后图片是否大于150kb,大于继续压缩

baos.reset();// 重置baos即清空baos

bmp.compress(Bitmap.CompressFormat.JPEG, options, baos);

Log.d("ROTK","baos"+baos.toByteArray().length);

// 这里压缩options%,把压缩后的数据存放到baos中

}

byte[] b = baos.toByteArray();

return b;

}

private
static Bitmap compressImageFromFile(String srcPath) {

BitmapFactory.Options newOpts =
new BitmapFactory.Options();

newOpts.inJustDecodeBounds =true;//
只读边,不读内容

Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);

newOpts.inJustDecodeBounds =false;

int w = newOpts.outWidth;

int h = newOpts.outHeight;

float hh = 800f;//

float ww = 480f;//压缩为800*480的尺寸

int 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;// 设置采样率

newOpts.inPreferredConfig = Config.ARGB_8888;//
该模式是默认的,可不设

newOpts.inPurgeable =true;// 同时设置才会有效

newOpts.inInputShareable =true;//
。当系统内存不够时候图片自动被回收

bitmap = BitmapFactory.decodeFile(srcPath, newOpts);

return bitmap;//这里输出的事bitmap因为我们还要进行质量压缩的

}

}

恩,以上!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 图片 压缩 优化