android 图片压缩方法:

第一:质量压缩法:

  1. private Bitmap compressImage(Bitmap image) {
  2.  
  3. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  4. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  5. int options = 100;
  6. while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩
  7. baos.reset();//重置baos即清空baos
  8. options -= 10;//每次都减少10
  9. image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
  10.  
  11. }
  12. ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
  13. Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
  14. return bitmap;
  15. }

第二:图片按比例大小压缩方法(根据路径获取图片并压缩):

  1. private Bitmap getimage(String srcPath) {
  2. BitmapFactory.Options newOpts = new BitmapFactory.Options();
  3. //开始读入图片,此时把options.inJustDecodeBounds 设回true了
  4. newOpts.inJustDecodeBounds = true;
  5. Bitmap bitmap = BitmapFactory.decodeFile(srcPath,newOpts);//此时返回bm为空
  6.  
  7. newOpts.inJustDecodeBounds = false;
  8. int w = newOpts.outWidth;
  9. int h = newOpts.outHeight;
  10. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  11. float hh = 800f;//这里设置高度为800f
  12. float ww = 480f;//这里设置宽度为480f
  13. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  14. int be = 1;//be=1表示不缩放
  15. if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
  16. be = (int) (newOpts.outWidth / ww);
  17. } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
  18. be = (int) (newOpts.outHeight / hh);
  19. }
  20. if (be <= 0)
  21. be = 1;
  22. newOpts.inSampleSize = be;//设置缩放比例
  23. //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
  24. bitmap = BitmapFactory.decodeFile(srcPath, newOpts);
  25. return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
  26. }

图片比例压缩时, 我看到一个算法,说比较快。。
be = (int) ((w / STANDARD_WIDTH + h/ STANDARD_HEIGHT) / 2);
结论二:图片比例压缩倍数 就是 (宽度压缩倍数+高度压缩倍数)/2..

第三:图片按比例大小压缩方法(根据Bitmap图片压缩):

  1. private Bitmap comp(Bitmap image) {
  2.  
  3. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  4. image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
  5. if( baos.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
  6. baos.reset();//重置baos即清空baos
  7. image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
  8. }
  9. ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
  10. BitmapFactory.Options newOpts = new BitmapFactory.Options();
  11. //开始读入图片,此时把options.inJustDecodeBounds 设回true了
  12. newOpts.inJustDecodeBounds = true;
  13. Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
  14. newOpts.inJustDecodeBounds = false;
  15. int w = newOpts.outWidth;
  16. int h = newOpts.outHeight;
  17. //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
  18. float hh = 800f;//这里设置高度为800f
  19. float ww = 480f;//这里设置宽度为480f
  20. //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
  21. int be = 1;//be=1表示不缩放
  22. if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
  23. be = (int) (newOpts.outWidth / ww);
  24. } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
  25. be = (int) (newOpts.outHeight / hh);
  26. }
  27. if (be <= 0)
  28. be = 1;
  29. newOpts.inSampleSize = be;//设置缩放比例
  30. newOpts.inPreferredConfig = Config.RGB_565;//降低图片从ARGB888到RGB565
  31. //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
  32. isBm = new ByteArrayInputStream(baos.toByteArray());
  33. bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
  34. return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
  35. }

android图片压缩方法的更多相关文章

  1. Android图片压缩方法总结

    本文总结Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩).   第一:质量压缩方法:   ? 1 2 3 ...

  2. android图片压缩的3种方法实例

    android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...

  3. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

  4. Android 图片压缩器

    概述 Android 图片压缩器:一款高效的图片压缩器库,支持批量压缩,异步压缩.多线程多任务压缩,压缩比设置等特性. 详细 代码下载:http://www.demodashi.com/demo/12 ...

  5. Android 图片压缩各种方式

       前言:由于公司项目当中需要用到压缩这块的相应技术,之前也做过的图片压缩都不是特别的理想, 所以这次花了很多心思,仔细研究和在网上找到了很多相对应的资料.为了就是 以后再做的时候直接拿来用就可以了 ...

  6. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  7. iOS 图片压缩方法

    iOS 图片压缩方法 两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size). 压缩图片质量 NSData *data = UIImageJPEGReprese ...

  8. 降低PNG图片存储大小方法、图片压缩方法

    降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...

  9. Android图片压缩上传(二)

    之前有用到libjpeg,还是有一定的局限性,最近用了一个新的方式,效果还是挺不错,随着作者的版本更新,Bug也随之变少,目前项目中运用已上线. 1.之前的方式Android图片压缩,不失真,上线项目 ...

随机推荐

  1. pandas.DataFrame 中save方法

    In [5]: frame.save('frame_pickle') ----------------------------------------------------------------- ...

  2. Configure the handler mapping priority in Spring MVC

    Often times, you may mix use of multiple handler mappings strategy in Spring MVC development. For ex ...

  3. Spring Autowiring by Name

    In Spring, "Autowiring by Name" means, if the name of a bean is same as the name of other ...

  4. Spring入门(3)-Spring命名空间与Bean作用域

    Spring入门(3)-Spring命名空间与Bean作用域 这篇文章主要介绍Spring的命名空间和Bean作用域 0. 目录 Spring命名空间 Bean作用域 1. Spring命名空间 在前 ...

  5. [iOS 多线程 & 网络 - 1.2] - 多线程GCD

    A.GCD基本使用 1.GCD的概念 什么是GCD全称是Grand Central Dispatch,可译为"牛逼的中枢调度器"纯C语言,提供了非常多强大的函数GCD的优势GCD是 ...

  6. 新网注册域名如何转向其他(如花生壳)DNS(不会报错,已经转入成功)

    最近在玩域名,发现相比较来说,新网的域名注册费用相对廉价好多. 但是我以前是用花生壳的,用惯了花生壳,就觉得新网的域名管理界面很不适应,并不是新网的不好,而是习惯了花生壳. 那么如何将新网注册的域名D ...

  7. SQLServer2008设置开启INTERNET远程连接

    SQL Server 2008默认是不允许远程连接的,sa帐户默认禁用的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,需要做两个部分的配置: 使用sa账户登录SQL Se ...

  8. git乱码问题

    直接看连接吧. http://my.oschina.net/lujian863/blog/168837

  9. 怀念我的老师——丁伟岳院士 by 史宇光

       在我的人生中,丁老师对我的帮助是莫大的. 我第一次见到丁老师是在91年8月份的一次南开非线性分析学术会议上(会议期间苏联发生了8.19事件),他当时报告的题目是关于二维调和映射热流短时间爆破的问 ...

  10. 使用自定义的BaseAdapter实现LIstView的展示

    http://stephen830.iteye.com/blog/1141394 使用自定义的BaseAdapter实现LIstView的展示 实现以下功能点: 1.通过自定义的BaseAdapter ...