{"title":"Java 图片压缩:将图片压缩到100KB以下 - 代码示例","description":"使用Java代码将图片压缩到100KB以下,本文提供详细代码示例和解释,帮助您轻松实现图片压缩功能。","keywords":"java 图片压缩, 图片压缩, 图片大小, 压缩图片, java imageio, bufferedimage, 压缩质量, 代码示例","content":"要将图片压缩到100KB以下,可以使用Java的ImageIO和BufferedImage类来实现。下面是一个简单的示例代码:\n\njava\nimport java.awt.Graphics2D;\nimport java.awt.Image;\nimport java.awt.image.BufferedImage;\nimport java.io.ByteArrayOutputStream;\nimport java.io.File;\nimport java.io.IOException;\nimport javax.imageio.ImageIO;\n\npublic class ImageCompressor {\n\n public static void main(String[] args) {\n try {\n File inputFile = new File("input.jpg");\n File outputFile = new File("output.jpg");\n compressImage(inputFile, outputFile, 100);\n } catch (IOException e) {\n e.printStackTrace();\n } \n }\n\n public static void compressImage(File inputFile, File outputFile, int targetSize) throws IOException {\n BufferedImage image = ImageIO.read(inputFile);\n\n // 计算目标压缩大小\n long targetSizeBytes = targetSize * 1024;\n\n // 获取图片格式\n String format = getFileExtension(outputFile.getName());\n\n // 逐步减小压缩质量,直到目标大小以下\n float quality = 0.9f;\n while (getImageSizeBytes(image, format) > targetSizeBytes && quality > 0.1f) {\n ByteArrayOutputStream baos = new ByteArrayOutputStream();\n\n // 压缩图片到输出流\n ImageIO.write(resizeImage(image, quality), format, baos);\n\n // 将输出流的内容写入文件\n baos.flush();\n baos.close();\n ImageIO.write(ImageIO.read(new ByteArrayInputStream(baos.toByteArray())), format, outputFile);\n\n // 更新压缩质量\n quality -= 0.1f;\n }\n }\n\n public static BufferedImage resizeImage(BufferedImage originalImage, float quality) {\n int targetWidth = (int) (originalImage.getWidth() * quality);\n int targetHeight = (int) (originalImage.getHeight() * quality);\n\n Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_SMOOTH);\n\n BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);\n Graphics2D graphics2D = outputImage.createGraphics();\n graphics2D.drawImage(resultingImage, 0, 0, null);\n graphics2D.dispose();\n\n return outputImage;\n }\n\n public static String getFileExtension(String fileName) {\n int dotIndex = fileName.lastIndexOf(".");\n if (dotIndex != -1 && dotIndex < fileName.length() - 1) {\n return fileName.substring(dotIndex + 1).toLowerCase();\n }\n return "";\n }\n\n public static long getImageSizeBytes(BufferedImage image, String format) throws IOException {\n ByteArrayOutputStream baos = new ByteArrayOutputStream();\n ImageIO.write(image, format, baos);\n baos.flush();\n long size = baos.size();\n baos.close();\n return size;\n }\n}\n\n\n上面的代码使用了逐步减小压缩质量的方法,直到图片大小小于目标大小。可以根据需要调整压缩质量的步长和初始质量。"}

Java 图片压缩:将图片压缩到100KB以下 - 代码示例

原文地址: https://www.cveoy.top/t/topic/qhIi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录