android如何丧心病狂的压缩

1.可以直接拷贝用的代码

private void encode(String path) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//输出流baos
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;//整体宽高压缩到1/4
// options.inPreferredConfig = Bitmap.Config.RGB_565;//测试没有生效
Bitmap bm = BitmapFactory.decodeFile(path, options);
bm.compress(Bitmap.CompressFormat.JPEG, 20, baos);//图片质量20,效果可以
}

2.前言

如果着急使用代码,上面可以满足你了,具体学习可以看下了。
最近项目中和h5交互需要拍照上传图片,选择的方法是直接图片转换成base64作为一个参数上传。于是悲剧了。android手机拍照一般2M起步了。用户拍照然后上传2M,如果美图拍照更美丽就完全悲剧。
必须压缩必须丧心病狂的压缩。

3.android图片压缩原理

Bitmap所占用的内存 = 图片长度 x 图片宽度 x 一个像素点占用的字节数。
3个参数,任意减少一个的值,就达到了压缩的效果。

4.像素点减少

bm.compress(Bitmap.CompressFormat.JPEG, 20, baos);
此方法最有用,可以从0–100改变。测试20时候压缩效果可以,看到的图片清晰度也可以接受。
注意:JPEG可以压缩 ,png是不可以压缩的,所以必须保证图片是JPEG。具体文档如下
compress
质量压缩20。压缩后剩余2%很强大
11-22 16:05:41.285 5119-5337/com.picc.nmms I/wechat: 压缩后图片的大小768k 宽度为502高度为392bytes.length= 9KB quality=20
11-22 16:05:41.285 5119-5337/com.picc.nmms I/wechat: file.length()=12k

RGB_565法
核心:选择RGB_565占用少的字节
其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。
ALPHA_8
表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度
ARGB_4444
表示16位ARGB位图,即A=4,R=4,G=4,B=4,一个像素点占4+4+4+4=16位,2个字节
ARGB_8888
表示32位ARGB位图,即A=8,R=8,G=8,B=8,一个像素点占8+8+8+8=32位,4个字节
RGB_565
表示16位RGB位图,即R=5,G=6,B=5,它没有透明度,一个像素点占5+6+5=16位,2个字节

5.减少图片宽高。

采样率压缩;整体缩小图片的宽高缩小。例子中4。就是宽高都*1/4.
下面测试数据
1倍
11-22 15:58:57.985 32493-32668/com.picc.nmms I/wechat: 压缩后图片的大小768k宽度为502高度为392
11-22 15:58:58.035 32493-32668/com.picc.nmms I/wechat: 压缩后图片的大小768k 宽度为502高度为392bytes.length= 144KB
11-22 15:58:58.035 32493-32668/com.picc.nmms I/wechat: file.length()=194k

2倍 压缩后1/2
11-22 15:48:50.525 24633-25581/com.picc.nmms I/wechat: 压缩后图片的大小192k宽度为251高度为196
11-22 15:48:50.535 24633-25581/com.picc.nmms I/wechat: 压缩后图片的大小192k 宽度为251高度为196bytes.length= 46KB
11-22 15:48:50.545 24633-25581/com.picc.nmms I/wechat: file.length()=62k

4倍 压缩后1/4
11-22 15:50:36.375 26370-26720/com.picc.nmms I/wechat: 压缩后图片的大小47k宽度为125高度为98
11-22 15:50:36.385 26370-26720/com.picc.nmms I/wechat: 压缩后图片的大小47k 宽度为125高度为98bytes.length= 15KB
11-22 15:50:36.385 26370-26720/com.picc.nmms I/wechat: file.length()=20k

缩放法压缩:手动等比例压缩宽高
指定宽高:如果宽高比例知道,可以宽高设置10*10一定很小,前提是可以接受。

6.最终使用

最后使用的是
降低图片质量+采样率压缩

11-22 16:10:49.665 8695-9426/com.picc.nmms I/wechat: 压缩后图片的大小23k 宽度为125高度为98 bytes.length= 1KB quality=10
11-22 16:10:49.675 8695-9426/com.picc.nmms I/wechat: file.length()=2k
原始图片数据386k 宽度为502高度为392
压缩后上传的base64数据2k。压缩了99.5%太丧心病狂了。
不过图片质量就很难接受了

最后效果
使用手机拍照2.9M,最后上传34k。压缩了99%不过效果也不错。
最后压缩后的效果
11-22 17:11:03.236 19978-24506/com.picc.nmms I/wechat: 压缩前图片的大小2916k
11-22 17:11:03.310 19978-24506/com.picc.nmms I/wechat: file.length()=46k 宽度为648高度为1152 bytes.length= 34KB quality=10

压缩好强大,好厉害。以后自己保存图片也可以考虑这样压缩下了,又不是美女风景图那么高清完全就是浪费存储资源和网速了,压缩压缩在压缩,哈哈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值