Java实现将图片压缩至2M以下:附代码示例及注意事项
在Java中,我们可以使用Apache Commons Imaging库(原名Sanselan)或者ImageIO和BufferedImage来压缩图片至指定大小。以下是一个简单的示例,该示例将图片压缩到小于2MB: ```java import java.awt.*; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class ImageCompressor { public static void compressToSize(File inputFile, File outputFile, long maxFileSize) throws IOException { BufferedImage originalImage = ImageIO.read(inputFile); double compressionQuality = 1.0; // Start with highest quality // Loop until the image is smaller than the max file size while (true) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(originalImage, "jpg", baos); byte[] imageData = baos.toByteArray(); if (imageData.length < maxFileSize) { break; // Image is small enough, write it out and exit loop } // Decrease quality for next iteration compressionQuality -= 0.05; if (compressionQuality < 0.0) { throw new IllegalArgumentException("Failed to compress image to less than " + maxFileSize + " bytes."); } // Re-encode the image with lower quality ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality((float) compressionQuality); ImageOutputStream ios = ImageIO.createImageOutputStream(outputFile); writer.setOutput(ios); writer.write(null, new IIOImage(originalImage, null, null), param); ios.close(); writer.dispose(); originalImage = ImageIO.read(outputFile); // Reload the compressed image for the next iteration } // Write the final image to output file ImageIO.write(originalImage, "jpg", outputFile); } public static void main(String[] args) throws IOException { File inputFile = new File("input.jpg"); File outputFile = new File("output.jpg"); long maxFileSize = 2 * 1024 * 1024; // 2 MB compressToSize(inputFile, outputFile, maxFileSize); } } ``` 注意:这个代码会尽可能地保持图像的质量,同时将其大小压缩到指定的限制内。它可能无法保证一定能达到目标大小,因为在某些情况下,即使将质量设置得非常低,文件大小仍然可能超过预期的目标大小。此示例仅支持JPEG格式的图片压缩,如果需要处理其他格式如PNG等,需要做相应的调整。 ######[AI写代码神器 | 576点数解答 | 2024-02-27 09:42:39]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)423
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)50
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)325
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1203
- Java 利用 Apache Commons Imaging 压缩 PNG 图片至指定大小,附代码及注意事项(阿里通义 | 524点数解答 | 2024-02-27 13:54:15)305
- C 语言计算钢筋混凝土简支梁受力:注意单位、运算与输出精度!(字节豆包 | 357点数解答 | 2025-11-21 00:46:31)42
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)285
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)282
- Java:设计圆类与圆柱体类并计算属性及体积表面积(字节豆包 | 470点数解答 | 2024-10-20 10:03:11)193
- Java 实现矩形与长方体类,精准计算底面积与体积(字节豆包 | 319点数解答 | 2024-10-20 10:25:46)300
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)280
- Python 题库题目类型与数量统计:代码实现及注意要点(字节豆包 | 251点数解答 | 2024-12-11 13:44:25)302