Android图片压缩

主要有两种形式:

  1. 压缩图片的尺寸大小
  2. 压缩图片的质量(尺寸不变)

1.压缩尺寸

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath,options);// 计算 inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath,options);

关键的在于设置options.inSampleSize的值,当options.inSampleSize为1的时候不压缩,2的时候压缩一倍,options.inSampleSize的有效值是1、2、4、8、16......

2.压缩质量

这种方式压缩后的尺寸大小不变

Bitmap bitmap = BitmapUtil.decodeBitmapFromFile(path,1080,1080);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Bitmap.CompressFormat compressFormat = Bitmap.CompressFormat.PNG ;
if(options.outMimeType.equals("image/jpeg")){   
 compressFormat = Bitmap.CompressFormat.JPEG;
}
bitmap.compress(compressFormat,30,stream);

这里需要注意compressFormat的值一定要和原图一直,否则压缩会不成功。这里使用BitmapFactory.Options先测量出图片文件的信息,options.outMimeType就表示图片的mime类型。
不要用后缀名检测格式,后缀名都是虚的,用户可以自由修改。

使用

有时候一张图片的质量很小,但是尺寸很大,加载时可能出出现这个警告:
Bitmap too large to be uploaded into a texture (440x6405, max=4096x4096)
虽然不会抛出错误,但是图片会不显示出来。
这是硬件加速的一个限制,关闭硬件加速即可。

  • 通常压缩上传可以两种方式一起压缩。
  • ImageView控件显示图片一般使用尺寸压缩后显示。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 非原创,只是整理,如果里面发现引用的内容没有标识出来,欢迎指出。 一、基本知识 (1)两种图片: 1)矢量图: 矢...
    风再起时ME阅读 2,482评论 0 19
  • 先发一张昨天去看我雷哥演唱会的皂片然后再说正文哈哈。 简介 由于工作原因,boss下达的任务就大概说了对图片进行压...
    我叫王菜鸟阅读 5,300评论 2 16
  • 前言 图片压缩在Android技术中已经属于烂大街,上周看了2个开源库然后对自己项目的压缩做了对比,发现一些新东西...
    08_carmelo阅读 34,971评论 13 58
  • 在Android开发中,图片的处理很长用到,网上图片的三级缓存的工具有很多,但是很多时候会对图片进行处理,...
    porten阅读 399评论 0 0
  • 望了望各位文触( •ิ_• ิ)这tm就有点尴尬了( •ิ_• ิ)嘛,总之多多关照(๑•̀ㅂ•́)و✧
    小怿阅读 189评论 0 0