全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

android 将图片压缩到指定的大小的示例

从网上收集后自己写的一个方法;

1.首先是一个根据分辨率压缩的类,首先对图片进行一次压缩

  /**
  * 根据分辨率压缩图片比例
  *
  * @param imgPath
  * @param w
  * @param h
  * @return
  */
 private static Bitmap compressByResolution(String imgPath, int w, int h) {
  BitmapFactory.Options opts = new BitmapFactory.Options();
  opts.inJustDecodeBounds = true;
  BitmapFactory.decodeFile(imgPath, opts);

  int width = opts.outWidth;
  int height = opts.outHeight;
  int widthScale = width / w;
  int heightScale = height / h;

  int scale;
  if (widthScale < heightScale) { //保留压缩比例小的
   scale = widthScale;
  } else {
   scale = heightScale;
  }

  if (scale < 1) {
   scale = 1;
  }
  Log.i(TAG,"图片分辨率压缩比例:" + scale);

  opts.inSampleSize = scale;

  opts.inJustDecodeBounds = false;

  Bitmap bitmap = BitmapFactory.decodeFile(imgPath, opts);

  return bitmap;
 }

2.第二就是循环对图片的压缩,直到压缩到指定的大小以下为止(重要!)

 /**
  * 根据分辨率压缩
  *
  * @param srcPath 图片路径
  * @param ImageSize 图片大小 单位kb
  * @return
  */
 public static boolean compressBitmap(String srcPath, int ImageSize, String savePath) {
  int subtract;
  Log.i(TAG, "图片处理开始..");
  Bitmap bitmap = compressByResolution(srcPath, 1024, 720); //分辨率压缩
  if (bitmap == null) {
   Log.i(TAG, "bitmap 为空");
   return false;
  }
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  int options = 100;
  bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
  Log.i(TAG, "图片分辨率压缩后:" + baos.toByteArray().length / 1024 + "KB");


  while (baos.toByteArray().length > ImageSize * 1024) { //循环判断如果压缩后图片是否大于ImageSize kb,大于继续压缩
   subtract = setSubstractSize(baos.toByteArray().length / 1024);
   baos.reset();//重置baos即清空baos
   options -= subtract;//每次都减少10
   bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
   Log.i(TAG, "图片压缩后:" + baos.toByteArray().length / 1024 + "KB");
  }
  Log.i(TAG, "图片处理完成!" + baos.toByteArray().length / 1024 + "KB");
  try {
   FileOutputStream fos = new FileOutputStream(new File(savePath));//将压缩后的图片保存的本地上指定路径中
   fos.write(baos.toByteArray());
   fos.flush();
   fos.close();
  } catch (Exception e) {
   e.printStackTrace();
  }

  if (bitmap != null) {
   bitmap.recycle();
  }

  return true; //压缩成功返回ture
 }

在这其中 

 /**
  * 根据图片的大小设置压缩的比例,提高速度
  *
  * @param imageMB
  * @return
  */
 private static int setSubstractSize(int imageMB) {

  if (imageMB > 1000) {
   return 60;
  } else if (imageMB > 750) {
   return 40;
  } else if (imageMB > 500) {
   return 20;
  } else {
   return 10;
  }

 }

这个方法用来动态设置每次压缩的比例,主要用于提升压缩的时间,这其中的数值是我大概测试出来的可以修改成你认为比较合适的

3.最后

压缩图片费时又费内存,很明显执行的时候需要在子线程中完成,如果需要的话可以加一个压缩完成的监听

下载地址:CommonUtils_jb51.rar

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# android压缩图片大小  # android  # 图片压缩  # android图片压缩的3种方法实例  # android bitmap compress(图片压缩)代码  # Android图片压缩方法并压缩到指定大小  # Android拍照得到全尺寸图片并进行压缩  # Android实现图片压缩(bitmap的六种压缩方式)  # Android图片压缩上传之基础篇  # Android中3种图片压缩处理方法  # Android图片压缩几种方式总结  # Android图片压缩以及优化实例  # Android性能优化之图片大小  # 尺寸压缩综合解决方案  # 是一个  # 图片处理  # 在这  # 下载地址  # 你认为  # 每次都  # 很明显  # 主要用于  # 大家多多  # 清空  # 为空  # 比较合适  # 地上  # 网上  # heightScale  # widthScale  # scale  # Log  # lt  # width 


相关文章: 如何在阿里云虚拟服务器快速搭建网站?  建站主机是什么?如何选择适合的建站主机?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站主机SSH密钥生成步骤及常见问题解答?  盘锦网站制作公司,盘锦大洼有多少5G网站?  javascript中对象的定义、使用以及对象和原型链操作小结  如何彻底删除建站之星生成的Banner?  潮流网站制作头像软件下载,适合母子的网名有哪些?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  网站制作知乎推荐,想做自己的网站用什么工具比较好?  招商网站制作流程,网站招商广告语?  Android自定义控件实现温度旋转按钮效果  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  如何解决VPS建站LNMP环境配置常见问题?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  建站之星代理商如何保障技术支持与售后服务?  深圳网站制作培训,深圳哪些招聘网站比较好?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  建站之星如何快速解决建站难题?  建站三合一如何选?哪家性价比更高?  怎么将XML数据可视化 D3.js加载XML  TestNG的testng.xml配置文件怎么写  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何通过NAT技术实现内网高效建站?  如何在Windows虚拟主机上快速搭建网站?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  郑州企业网站制作公司,郑州招聘网站有哪些?  建站与域名管理如何高效结合?  已有域名和空间如何快速搭建网站?  淘宝制作网站有哪些,淘宝网官网主页?  如何在自有机房高效搭建专业网站?  外贸公司网站制作哪家好,maersk船公司官网?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  相册网站制作软件,图片上的网址怎么复制?  宝塔面板如何快速创建新站点?  建站之星展会模板:智能建站与自助搭建高效解决方案  建站之星logo尺寸如何设置最合适?  如何通过PHP快速构建高效问答网站功能?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  深入理解Android中的xmlns:tools属性  如何用搬瓦工VPS快速搭建个人网站?  建站主机核心功能解析:服务器选择与网站搭建流程指南  宝塔Windows建站如何避免显示默认IIS页面?  建站之星与建站宝盒如何选择最佳方案?  建站主机是否属于云主机类型? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。