下面是使用thumbnailator依赖编写的一个压缩图片类的详细代码示例,该类会对大小超过固定尺寸的图片进行无限循环压缩。
java Copy code
 import net.coobird.thumbnailator.Thumbnails;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.File;
 import java.io.IOException;
public class ImageCompressor {
     private static final int MAX_WIDTH = 800; // 最大宽度
     private static final int MAX_HEIGHT = 600; // 最大高度
    public static void main(String[] args) throws IOException {
         String imagePath = "path/to/your/image.jpg";
         compressImage(imagePath);
     }
    public static void compressImage(String imagePath) throws IOException {
         File imageFile = new File(imagePath);
        while (isLargerThanMaxSize(imageFile)) {
             BufferedImage image = ImageIO.read(imageFile);
             int width = image.getWidth();
             int height = image.getHeight();
            // 根据比例计算新的宽度和高度
             double scale = Math.max((double) width / MAX_WIDTH, (double) height / MAX_HEIGHT);
             int newWidth = (int) (width / scale);
             int newHeight = (int) (height / scale);
            Thumbnails.of(imageFile)
                     .size(newWidth, newHeight)
                     .outputQuality(0.9) // 压缩质量为90%
                     .toFile(imageFile);
         }
        System.out.println("Image compressed successfully!");
     }
    private static boolean isLargerThanMaxSize(File file) {
         long fileSize = file.length();
         return fileSize > MAX_WIDTH * MAX_HEIGHT;
     }
 }
 在上述示例中,我们首先指定了要处理的图像文件路径imagePath,然后调用compressImage()方法来实现无限循环压缩。其中,我们使用ImageIO.read()方法读取图像文件并获取其宽度和高度。然后,我们根据比例计算出新的宽度和高度,确保其不超过最大宽度和最大高度。
接下来,我们使用Thumbnails.of()方法以及链式调用.size(newWidth, newHeight)将图像大小设置为新的宽度和高度,并使用.outputQuality(0.9)设置压缩质量为90%。最后,我们将结果保存回原始图像文件。
在每次循环迭代中,我们使用isLargerThanMaxSize()方法检查图像文件是否仍然超过所设定的最大尺寸。如果是,则继续进行下一次循环迭代,直到图像大小小于等于最大尺寸为止。
请确保将thumbnailator库添加到项目的依赖中,并根据实际情况替换示例代码中的图像路径和最大尺寸。