全网整合营销服务商

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

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

Android图片压缩方法并压缩到指定大小

一、图片质量压缩

/** 
   * 质量压缩方法 
   * @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即清空baos  
      image.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图片压缩方法并压缩到指定大小,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# android  # 图片压缩到指定大小  # 图片压缩  # Android实现图片压缩(bitmap的六种压缩方式)  # Android开发之图片压缩实现方法分析  # Android图片压缩几种方式总结  # Android开发实现图片大小与质量压缩及保存  # 按比例  # 其中一个  # 比较多  # 设置为  # 小编  # 清空  # 度高  # 以高  # 在此  # 给大家  # 每次都  # 所述  # 给我留言  # 感谢大家  # 为空  # 疑问请  # 有任何  # isBm  # int  # JPEG 


相关文章: 建站三合一如何选?哪家性价比更高?  如何选择网络建站服务器?高效建站必看指南  广州营销型建站服务商推荐:技术优势与SEO优化解析  建设网站制作价格,怎样建立自己的公司网站?  网站网页制作专业公司,怎样制作自己的网页?  如何快速搭建个人网站并优化SEO?  简历在线制作网站免费版,如何创建个人简历?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站主机是什么?如何选择适合的建站主机?  无锡营销型网站制作公司,无锡网选车牌流程?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  XML的“混合内容”是什么 怎么用DTD或XSD定义  如何快速搭建自助建站会员专属系统?  如何选择服务器才能高效搭建专属网站?  如何通过西部数码建站助手快速创建专业网站?  如何在景安服务器上快速搭建个人网站?  如何在香港免费服务器上快速搭建网站?  C++如何编写函数模板?(泛型编程入门)  建站之星如何修改网站生成路径?  如何在万网自助建站中设置域名及备案?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  魔毅自助建站系统:模板定制与SEO优化一键生成指南  seo网站制作优化,网站SEO优化步骤有哪些?  广东企业建站网站优化与SEO营销核心策略指南  建站之星与建站宝盒如何选择最佳方案?  如何配置WinSCP新建站点的密钥验证步骤?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  常州自助建站工具推荐:低成本搭建与模板选择技巧  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  建站之星CMS五站合一模板配置与SEO优化指南  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  ,怎么用自己头像做动态表情包?  北京网站制作公司哪家好一点,北京租房网站有哪些?  营销式网站制作方案,销售哪个网站招聘效果最好?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  宝塔建站后网页无法访问如何解决?  制作电商网页,电商供应链怎么做?  如何在Golang中使用replace替换模块_指定本地或远程路径  江苏网站制作公司有哪些,江苏书法考级官方网站?  宝塔建站助手安装配置与建站模板使用全流程解析  Python路径拼接规范_跨平台处理说明【指导】  ,在苏州找工作,上哪个网站比较好? 

您的项目需求

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