当前位置: 首页 > news >正文

java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过1M就无线循环下去的详细代码实例?

下面是使用thumbnailator依赖编写的一个压缩图片类的详细代码示例,该类会对大小超过1MB的图片进行无限循环压缩。

java Copy code
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import net.coobird.thumbnailator.Thumbnails;

public class ImageCompressor {
    private static final long MAX_SIZE = 1_000_000; // 1MB

    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 (imageFile.length() > MAX_SIZE) {
            BufferedImage image = ImageIO.read(imageFile);
            int width = image.getWidth();
            int height = image.getHeight();

            Thumbnails.of(imageFile)
                    .size(width / 2, height / 2) // 缩小图片为原始大小的一半
                    .outputQuality(0.9) // 压缩质量为90%
                    .toFile(imageFile);
        }

        System.out.println("Image compressed successfully!");
    }
}
在上述示例中,我们首先指定了要处理的图像文件路径imagePath,然后调用compressImage()方法来实现无限循环压缩。其中,我们使用ImageIO.read()方法读取图像文件并获取其宽度和高度。然后,我们使用Thumbnails.of()方法以及链式调用.size(width / 2, height / 2)将图像大小缩小为原始大小的一半,并使用.outputQuality(0.9)设置压缩质量为90%。最后,我们将结果保存回原始图像文件。

在每次循环迭代中,我们检查图像文件大小是否仍然超过1MB(MAX_SIZE)。如果是,则继续进行下一次循环迭代,直到图像大小小于等于1MB为止。

请确保将thumbnailator库添加到项目的依赖中,并根据实际情况替换示例代码中的图像路径。

相关文章:

  • 【ARM Trace32(劳特巴赫) 使用介绍 13 -- Trace32 变量篇】
  • 得帆云助力容百科技构建CRM系统,实现LTC全流程管理
  • 【管理运筹学】背诵手册(七)| 网络计划与排队论
  • 游戏架构之面向对象模型和组件模型
  • 【ML】softmax简单理解。
  • 【IC前端虚拟项目】工程目录组织说明
  • ospf选路
  • git 常用部分方法
  • node.js出现version `GLIBC_2.27‘ not found的解决方案
  • Java 使用html2image将html生成缩略图图片
  • Liunx Centos 防火墙操作
  • ingress介绍和ingress通过LoadBalancer暴露服务配置
  • 第一百九十三回 滚动布局的使用示例
  • HTTP、HTTPS、SSL协议以及报文讲解
  • GO设计模式——13、享元模式(结构型)
  • 分享的文章《人生如棋》
  • 时间复杂度分析经典问题——最大子序列和
  • ➹使用webpack配置多页面应用(MPA)
  • Android Volley源码解析
  • Centos6.8 使用rpm安装mysql5.7
  • express + mock 让前后台并行开发
  • gulp 教程
  • happypack两次报错的问题
  • Java方法详解
  • leetcode388. Longest Absolute File Path
  • php中curl和soap方式请求服务超时问题
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 理解在java “”i=i++;”所发生的事情
  • 什么是Javascript函数节流?
  • 网页视频流m3u8/ts视频下载
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​比特币大跌的 2 个原因
  • ​决定德拉瓦州地区版图的关键历史事件
  • !!java web学习笔记(一到五)
  • #QT(串口助手-界面)
  • #Z0458. 树的中心2
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转) 深度模型优化性能 调参
  • (转)Mysql的优化设置
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .apk 成为历史!
  • .axf 转化 .bin文件 的方法
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET NPOI导出Excel详解
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)