首页 > 编程语言 >【Java】图片压缩处理

【Java】图片压缩处理

时间:2023-03-12 19:33:22浏览次数:32  
标签:Java 处理 destPath 压缩 new 图片 accuracy

需求如下:

一些图片太大了,手机拍摄上传的图片有5M大小,然后阅读的内容其实不需要特别高的分辨率

1M以下的图片并不需要被压缩,压缩只是针对部分过大的图片处理

 

图片处理库:

我看了几篇,还是选代码量最少的用:

先要把文件写入服务器本地磁盘上,再用处理库读取进行处理输出

依赖坐标

<!-- https://mvnrepository.com/artifact/net.coobird/thumbnailator -->
<dependency>
    <groupId>net.coobird</groupId>
    <artifactId>thumbnailator</artifactId>
    <version>0.4.19</version>
</dependency>

 

参考博客:

https://blog.csdn.net/weixin_42031557/article/details/126100465

  

参考博客的写法会把原来的图片覆写掉,但是为了比较压缩差别,肯定不能覆写的

// 图片压缩
@Test
public void pictureCompressTest() {
    String src = "C:\\Users\\Administrator\\Desktop\\test.jpg";
    String dest = "C:\\Users\\Administrator\\Desktop\\test2.jpg";
    pictureCompress(src, dest, 1024 * 1024L, 0.5);
}

/**
 * 图片压缩处理方法
 * @param srcPath 图片源文件路径
 * @param destPath 输出文件路径
 * @param fileSize 限制在多大时停止压缩
 * @param accuracy 压缩图片的精细度
 */
@SneakyThrows
public static void pictureCompress(String srcPath, String destPath, long fileSize, double accuracy) {
    final File srcFile = new File(srcPath);
    long length = srcFile.length();
/* 如果图片本身不够大的话就不需要做任何处理 */ if (length < fileSize) return; BufferedImage bim = ImageIO.read(srcFile); 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(srcPath).size(desWidth, desHeight).outputQuality(accuracy).toFile(destPath);
   /* 压缩之后,使用输出后的文件递归,重复写入处理,直到大小满意 */ pictureCompress(destPath, destPath, fileSize, accuracy); }

 

 

标签:Java,处理,destPath,压缩,new,图片,accuracy
From: https://www.cnblogs.com/mindzone/p/17208825.html

相关文章

  • java8新特性-引用流-sorted
    例子:List<User>users=newArrayList<>();users.add(newUser("张三",30));users.add(newUser("李四",34));users.add(newUser("王五",20));......
  • Java中的线程状态
    Java中线程的状态New:新创建对象,还没执行start()方法RUNNABLE:就绪态和运行状态。BLOCKED:表示线程等到获取锁时候的状态。WAITING:处于这种状态的线程不会被分配CPU执行......
  • ChatGPT 辅助 stable-diffusion 生成图片描述 tag 话术
    将如下话术发给ChatGPT:请用尽量多的英文单词描述一幅画,描述词尽量丰富,每个单词之间用逗号分隔:一个XXX 如果回复的tag数量不够,则追加四个字:不够丰富 之后Chat......
  • java SE、java ME、 java EE区别和
        ......
  • java数据库代码生成工具代码
    importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.generator.AutoGenerator;importcom.baomidou.mybatisplus.generator.config.*......
  • java 异常
    异常:仅有在运行过程中,程序报错才叫做异常,在编辑是有异常那个是编译错了异常分类:异常按照对程序的影响情况来分有Error(错误)和Exception(意外);Error:虚拟机......
  • java基础六-JSP基础
    JSP基础<%%>body内输出out.print("xx")声明变量局部变量优先级大于全局变量优先级,若同时声明两个同名的变量泽使用局部 <%%>声明局部变量<%!%>声明全局变量设......
  • 数组的定义与使用--(java)
    1.数组的基本概念✨✨☀1.1什么是数组‼数组:......
  • java线程池使用小技巧:自定义拒绝策略
    java线程池默认提供了几种拒绝策略:这几个策略都实现了RejectedExecutionHandler,拿DiscardOldestPolicy来说,查看源码:核心代码只有2行:e.getQueue().poll()从列表里弹......
  • 韩顺平java学习笔记——概述
    Java执行流程分析Java文件(源文件)—javac编译->.class文件(字节码文件)--java运行->结果什么是编译Javachello.java1、 有了java源文件,通过编译器将其变异成JVM可以......