一、图片质量压缩

/*** 质量压缩方法* @param image* @return*/
public static Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 90;while (baos.toByteArray().length / 1024 > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩baos.reset(); // 重置baos即清空baosimage.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中options -= 10;// 每次都减少10}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片return bitmap;
}

二、按比例大小压缩 (路径获取图片)

/*** 图片按比例大小压缩方法  * @param srcPath (根据路径获取图片并压缩)  * @return*/
public static Bitmap getimage(String srcPath) {BitmapFactory.Options newOpts = new BitmapFactory.Options();// 开始读入图片,此时把options.inJustDecodeBounds 设回true了    newOpts.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts);// 此时返回bm为空    newOpts.inJustDecodeBounds = false;int w = newOpts.outWidth;int h = newOpts.outHeight;// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为    float hh = 800f;// 这里设置高度为800f    float ww = 480f;// 这里设置宽度为480f    // 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可    int be = 1;// 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;// 设置缩放比例    // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了    bitmap = BitmapFactory.decodeFile(srcPath, newOpts);return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩
}

三、按比例大小压缩 (Bitmap)

/*** 图片按比例大小压缩方法  * @param image (根据Bitmap图片压缩)  * @return*/
public static Bitmap compressScale(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出    if (baos.toByteArray().length / 1024 > 1024) {baos.reset();// 重置baos即清空baos    image.compress(Bitmap.CompressFormat.JPEG, 80, baos);// 这里压缩50%,把压缩后的数据存放到baos中    }ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());BitmapFactory.Options newOpts = new BitmapFactory.Options();// 开始读入图片,此时把options.inJustDecodeBounds 设回true了    newOpts.inJustDecodeBounds = true;Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);newOpts.inJustDecodeBounds = false;int w = newOpts.outWidth;int h = newOpts.outHeight;Log.i(TAG, w + "---------------" + h);// 现在主流手机比较多是800*480分辨率,所以高和宽我们设置为    // float hh = 800f;// 这里设置高度为800f    // float ww = 480f;// 这里设置宽度为480f    float hh = 512f;float ww = 512f;// 缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可    int be = 1;// 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.RGB_565;//降低图片从ARGB888到RGB565    // 重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了    isBm = new ByteArrayInputStream(baos.toByteArray());bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);return compressImage(bitmap);// 压缩好比例大小后再进行质量压缩    //return bitmap;
}

三种Android图片压缩方法 压缩到指定大小相关推荐

  1. android图片传输三方框架,Android开发三种第三方图片加载的框架

    最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...

  2. 图片上传压缩android,android 图片上传压缩常见问题分析

    图片的上传与压缩是android经常需要用到的步骤,那么,如何解决上传图片oom问题呢?android 图片上传压缩常见问题分析,希望可以帮助大家更加的了解android 图片方面的困惑. 下面,是我 ...

  3. Android:三种Adapter的使用方法

    三种Adapter的使用方法 1.simpleAdapter使用(3步:准备样式,准备数据,配置适配器) 1).adapter方法说明 2).插入一个listview ,创建 listview 样式x ...

  4. css 背景效果_css透明度怎么设置?三种css图片透明度的设置方法

    css透明度的设置在网页的设计中是经常需要用到的,有时为了设计出的网页更加的美观,会对图片进行透明化处理,这样网页上面的内容就不会看不见,有的网页因为图片作为背景,也会更加美观,那么,css中的透明度 ...

  5. tomcat中三种部署项目的方法(转)

    tomcat中三种部署项目的方法 第一种方法:在tomcat中的conf目录中,在server.xml中的,<host/>节点中添加:  <Context path="/h ...

  6. xslt三种带图片的超链接(a标签,img标签)写法

    来源:http://www.notsee.info/tech/XSLT/XSLT-detail-333.xml 第一种带图片的超链接写法 xml   <notsee ID="a002& ...

  7. 计算机win7开机了进入不到桌面,win7开机不显示桌面怎么回事|win7开机不显示桌面三种原因和解决方法...

    一些win7系统用户在开机的时候发现电脑桌面不显示了,这样就没办法进行任何操作了,导致win7开机不显示桌面的原因有很多,为帮助大家能够快速解决问题,小编收集总结一些win7开机不显示桌面三种原因和解 ...

  8. 三种权重的初始化方法

    总结了三种权重的初始化方法,前两种比较常见,后一种是最新的. 1. Gaussian Weights are randomly drawn from Gaussian distributions wi ...

  9. day01 js三种导入html的方法、js书写规范、变量的基本使用、变量提升

    昨天是初学js的第一天,为什么今天才写,我觉得这样可以帮助我复习昨天的知识,加深对js的理解. 我之前学过java的,昨天转入js的学习,对js略有些体会和大家分享下,js刚入门感觉js相对于java ...

最新文章

  1. Visual Studio 2015编译Lua 5.3.4遇到的坑
  2. 2010有道难题练习赛2
  3. PostgreSQL 最佳实践 - 水平分库(基于plproxy)
  4. 一次 .NET Core 中玩锁的经历:ManualResetEventSlim, SemaphoreSlim
  5. String类得常用方法
  6. java访问数据库方式_java数据库访问(二)—JDBC方式(配合连接池)
  7. HTML+CSS+JS实现 ❤️制作loading动画效果❤️
  8. LVIS挑战赛冠军总结 | 视觉任务中长尾分布问题研究进展与挑战
  9. 【报告分享】人工智能新时代报告.pdf(附下载链接)
  10. 数据结构 3-1-1 栈
  11. 2017 ACM-ICPC北京网络赛: C. Matrix(DP)
  12. gcc/g++ 编译、链接与常用命令工具(1)
  13. 在MFC中使用GDI+的一般方法,以VC6.0编译器为例
  14. 需求不容易确定的项目不要接
  15. ipixsoft swf to html5 converter,iPixSoft SWF to Video Converter
  16. 19年6月英语六级第一套听力单词
  17. 【Bootstrap】选择折叠项collapse
  18. 【vue】bable的介绍以及编写vue文件
  19. 【POJ】2676-Sudoku 【51Nod】1211-数独(DFS)
  20. 台式计算机文件打不开怎么回事,电脑文件打不开是怎么回事 电脑Word文档打不开怎么处理...

热门文章

  1. 信息安全中的尖刀burpsuite的下载,安装
  2. 图片去水印工具-图片去水印的工具有哪些
  3. axios中的put和patch有什么区别
  4. Mac系统中QQ记录的存储路径
  5. 学生学号判断专业班级
  6. PS CC 2018 图层
  7. Python读取Excel日期列读出来是数字的处理
  8. ACM POJ 题目分类(完整整理版本)
  9. python获取目标时间距离现在多长时间(‘2020-5-30 23:40:00‘)
  10. 89岁,他拿下人生第三个博士学位