• 毛丹青:故乡是文学的起跑线 2019-12-10
  • 不简单的职业谈资中国国家地理网 2019-12-10
  • 袁亮任安徽理工大学校长 2019-12-08
  • 重庆“彩色S型公路”正式通车  市民开车排队体验 2019-12-08
  • 2017年全国“创新社会治理典型案例”征集活动专家评审结果 2019-12-03
  • 首批甲骨文释读优秀成果 获奖名单公布 2019-11-24
  • 海淀区曙光街道举办第五届龙舟赛 2019-11-16
  • 广汽传祺新GS4将6月16日上市 配置升级 2019-11-15
  • 李克强访问印尼、出席中日韩第七次领导人会晤并对日本正式访问 2019-11-15
  • 推动长江经济带发展 习近平要求境界和担当 2019-11-11
  • 丰台东铁匠营街道:品粽赏乐感受改革开放四十周年 2019-11-11
  • 学习宣传宪法 弘扬法治精神 2019-11-07
  • 山东搭建“灯塔—党建在线”网络平台 2019-11-07
  • 2016杨宗纬VOCAL巡演北京站正式开票杨宗纬VOCAL 2019-11-04
  • 年龄大了,也想积点口德,已经给你笔下留情了。 2019-11-04
  • 香港赛马会曾道人电话:使用Thumbnails实现图片指定大小压缩

     更新时间:2019年08月29日 08:37:21   作者:DcForever   我要评论
    这篇文章主要为大家详细介绍了使用Thumbnails实现图片指定大小压缩,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw 项目中有个要求,对上传服务器的图片大小进行判断,大于500k的图片要进行压缩处理,让其小于500k后在上传。

    可以通过java api的ImageIO实现图片压缩,但是看了网上的博客普遍都说bug比较多,会有OOM内存溢出的现象。

    Thumbnails插件是Google的插件,能指定不同的参数进行压缩操作。
    比如:宽高(size),缩放(scale),制定质量比(outputQuality)等。

    插件使用的jar包为:

    thumbnailator-0.4.8.jar

    代码如下:

     /**
     * 
     * @param srcPath 原图片地址
     * @param desPath 目标图片地址
     * @param desFileSize 指定图片大小,单位kb
     * @param accuracy 精度,递归压缩的比率,建议小于0.9
     * @return
     */
     public static String commpressPicForScale(String srcPath,String desPath,
     long desFileSize , double accuracy){
     try {
     File srcFile = new File(srcPath);
     long srcFilesize = srcFile.length();
     System.out.println("原图片:"+srcPath + ",大小:" + srcFilesize/1024 + "kb");
     //递归压缩,直到目标文件大小小于desFileSize
     commpressPicCycle(desPath, desFileSize, accuracy);
     
     File desFile = new File(desPath);
     System.out.println("目标图片:" + desPath + ",大小" + desFile.length()/1024 + "kb");
     System.out.println("图片压缩完成!");
     } catch (Exception e) {
     e.printStackTrace();
     }
     return desPath;
     }
    
     public static void commpressPicCycle(String desPath , long desFileSize,
     double accuracy) throws IOException{
     File imgFile = new File(desPath);
     long fileSize = imgFile.length();
     //判断大小,如果小于500k,不压缩,如果大于等于500k,压缩
     if(fileSize <= desFileSize * 500){
     return;
     }
     //计算宽高
     BufferedImage bim = ImageIO.read(imgFile);
     int imgWidth = bim.getWidth();
     int imgHeight = bim.getHeight();
     int desWidth = new BigDecimal(imgWidth).multiply(
      new BigDecimal(accuracy)).intValue();
     int desHeight = new BigDecimal(imgHeight).multiply(
      new BigDecimal(accuracy)).intValue();
     Thumbnails.of(desPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(desPath);
     //如果不满足要求,递归直至满足小于1M的要求
     commpressPicCycle(desPath, desFileSize, accuracy);
     }

    然后压缩图片大?。?/p>

    commpressPicForScale(filePath, filePath, 500, 0.8);

    压缩完成:

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

    相关文章

    • Android拍照或从图库选择图片并裁剪

      Android拍照或从图库选择图片并裁剪

      这篇文章主要介绍了Android拍照或从图库选择图片并裁剪的相关资料,具有一定的参考价值,需要的朋友可以参考下
      2016-08-08
    • Android View刷新机制实例分析

      Android View刷新机制实例分析

      这篇文章主要介绍了Android View刷新机制,结合实例形式较为详细的分析了Android的View刷新机制功能、原理与具体使用技巧,需要的朋友可以参考下
      2016-02-02
    • Android编程视频播放API之MediaPlayer用法示例

      Android编程视频播放API之MediaPlayer用法示例

      这篇文章主要介绍了Android编程视频播放API之MediaPlayer用法,结合实例形式分析了基于Android API实现视频播放功能的多媒体文件读取、判断、事件响应及流媒体播放等相关实现技巧,需要的朋友可以参考下
      2017-08-08
    • 详解Android应用main函数的调用

      详解Android应用main函数的调用

      Android常识,App主线程初始化了Looper,调用prepare的地方是ActivityThread.main函数。问题来了,App的main函数在哪儿调用,下面我们来一起学习一下吧
      2019-06-06
    • Android app应用多语言切换功能实现

      Android app应用多语言切换功能实现

      这篇文章主要为大家详细介绍了Android app应用多语言切换功能实现代码,感兴趣的小伙伴们可以参考一下
      2016-08-08
    • Android ShareSDK快速实现分享功能

      Android ShareSDK快速实现分享功能

      这篇文章主要介绍了Android ShareSDK快速实现分享功能的相关资料,需要的朋友可以参考下
      2016-02-02
    • Android实现获取应用程序相关信息列表的方法

      Android实现获取应用程序相关信息列表的方法

      这篇文章主要介绍了Android实现获取应用程序相关信息列表的方法,是应用管理器常用的功能,需要的朋友可以参考下
      2014-07-07
    • 深入浅析Android Fragment(下篇)

      深入浅析Android Fragment(下篇)

      本篇文章给大家介绍如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成,对Android Fragment感兴趣的朋友可以参考下本篇文章
      2015-10-10
    • Android编程实现在底端显示选项卡的方法

      Android编程实现在底端显示选项卡的方法

      这篇文章主要介绍了Android编程实现在底端显示选项卡的方法,涉及Android界面线性布局、相对布局及选项卡设置相关操作技巧,需要的朋友可以参考下
      2017-02-02
    • Android多点触控技术实战 针对图片自由缩放和移动

      Android多点触控技术实战 针对图片自由缩放和移动

      这篇文章主要为大家详细介绍了Android多点触控技术实战,自由地对图片进行缩放和移动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2016-10-10

    最新评论

  • 毛丹青:故乡是文学的起跑线 2019-12-10
  • 不简单的职业谈资中国国家地理网 2019-12-10
  • 袁亮任安徽理工大学校长 2019-12-08
  • 重庆“彩色S型公路”正式通车  市民开车排队体验 2019-12-08
  • 2017年全国“创新社会治理典型案例”征集活动专家评审结果 2019-12-03
  • 首批甲骨文释读优秀成果 获奖名单公布 2019-11-24
  • 海淀区曙光街道举办第五届龙舟赛 2019-11-16
  • 广汽传祺新GS4将6月16日上市 配置升级 2019-11-15
  • 李克强访问印尼、出席中日韩第七次领导人会晤并对日本正式访问 2019-11-15
  • 推动长江经济带发展 习近平要求境界和担当 2019-11-11
  • 丰台东铁匠营街道:品粽赏乐感受改革开放四十周年 2019-11-11
  • 学习宣传宪法 弘扬法治精神 2019-11-07
  • 山东搭建“灯塔—党建在线”网络平台 2019-11-07
  • 2016杨宗纬VOCAL巡演北京站正式开票杨宗纬VOCAL 2019-11-04
  • 年龄大了,也想积点口德,已经给你笔下留情了。 2019-11-04
  • 山西快乐10分开奖结果 七星彩开奖直播竟彩网 彩票开奖结果 波克棋牌下载安装 时时彩盈利计划图 彩票大奖支票图片 吉林快三现在开奖结果 澳洲幸运5网址 福彩3d出号走势图 真钱诈金花app