我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 运维优化 > java的2中高清压缩图片的方法 亲测
总共48087条微博

动态微博

查看: 4965|回复: 1

java的2中高清压缩图片的方法 亲测

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-03-06 09:45:27 |只看该作者 |倒序浏览
    java的2中高清压缩图片的方法 亲测
    1.         /**
    2.          * 压缩图片方法
    3.          *
    4.          * @param oldFile
    5.          *            要压缩的图片路径
    6.          * @param newFile
    7.          *            压缩后添加的后缀名(在扩展名前添加,不会改变格式)
    8.          * @param width
    9.          *            压缩宽
    10.          * @param height
    11.          *            压缩高
    12.          * @param percentage
    13.          *            是否等比例压缩,true则宽高比自动调整
    14.          * @return
    15.          * @throws Exception
    16.          */
    17.         public static void reduceImg(String oldFile,int widthdist,
    18.                         int heightdist, boolean percentage) {
    19.                 try {
    20.                         File srcfile = new File(oldFile);
    21.                         if (!srcfile.exists()) {
    22.                                 return;
    23.                         }
    24.                         Image src = javax.imageio.ImageIO.read(srcfile);
    25.                         if (percentage) {
    26.                                 // 为等比压缩计算输出的宽高
    27.                                 double rate1 = ((double) src.getWidth(null))
    28.                                                 / (double) widthdist + 0.1;
    29.                                 double rate2 = ((double) src.getHeight(null))
    30.                                                 / (double) heightdist + 0.1;
    31.                                 double rate = rate1 > rate2 ? rate1 : rate2;
    32.                                 int new_w = (int) (((double) src.getWidth(null)) / rate);
    33.                                 int new_h = (int) (((double) src.getHeight(null)) / rate);
    34.                                 // 设定宽高
    35.                                 BufferedImage tag = new BufferedImage(new_w, new_h,
    36.                                                 BufferedImage.TYPE_INT_RGB);
    37.                                 // 设定文件扩展名
    38. //                                String filePrex = oldFile
    39. //                                                .substring(0, oldFile.lastIndexOf('.'));
    40. //                                newFile = filePrex + "SCALE_AREA_AVERAGING"
    41. //                                                + oldFile.substring(filePrex.length());
    42.                                 // 生成图片
    43.                                 // 两种方法,效果与质量都相同,效率差不多
    44.                                 //tag.getGraphics().drawImage(src.getScaledInstance(widthdist,heightdist,Image.SCALE_SMOOTH), 0, 0, null);
    45.                                 tag.getGraphics().drawImage(src.getScaledInstance(new_w, new_h,Image.SCALE_AREA_AVERAGING), 0, 0, null);
    46.                                 FileOutputStream out = new FileOutputStream(oldFile);
    47.                                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    48.                                 encoder.encode(tag);
    49.                                 out.close();
    50.                         } else {
    51.                                 // 设定宽高
    52.                                 BufferedImage tag = new BufferedImage(widthdist, heightdist,
    53.                                                 BufferedImage.TYPE_INT_RGB);
    54.                                 // 设定文件扩展名
    55. //                                String filePrex = oldFile
    56. //                                                .substring(0, oldFile.lastIndexOf('.'));
    57. //                                newFile = filePrex + "SCALE_AREA_AVERAGING" + newFile
    58. //                                                + oldFile.substring(filePrex.length());
    59.                                 // 生成图片
    60.                                 // 两种方法,效果与质量都相同,第二种效率比第一种高,约一倍
    61.                                 // tag.getGraphics().drawImage(src.getScaledInstance(widthdist,heightdist, Image.SCALE_SMOOTH), 0, 0, null);
    62.                                 tag.getGraphics().drawImage(src.getScaledInstance(widthdist, heightdist,Image.SCALE_AREA_AVERAGING), 0, 0, null);
    63.                                 FileOutputStream out = new FileOutputStream(oldFile);
    64.                                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    65.                                 encoder.encode(tag);
    66.                                 out.close();
    67.                         }
    68.                 } catch (IOException ex) {
    69.                         ex.printStackTrace();
    70.                 }
    71.         }
    复制代码

    测试 main方法
    1. public static void main(String[] args) {
    2.                 reduceImg("C:/Users/Administrator/Desktop/图片/4927782417373561737.jpg",600, 600, true);
    3.                 System.out.print("ok…");
    4.         }
    复制代码
    PicCompression.rar (1.27 KB, 下载次数: 45)



    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    本帖被以下淘专辑推荐:

    96

    主题

    7

    听众

    406

    金钱

    四袋长老

    该用户从未签到

    沙发
    发表于 2014-03-10 21:29:25 |只看该作者
    找了好久了 不错下来看看
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表