java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过固定尺寸就无限循环下去的详细代码实例?
下面是使用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库添加到项目的依赖中,并根据实际情况替换示例代码中的图像路径和最大尺寸。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!