diff --git a/src/main/java/com/sqx/modules/file/utils/FileUploadUtils.java b/src/main/java/com/sqx/modules/file/utils/FileUploadUtils.java index 4faab90..98e4b41 100644 --- a/src/main/java/com/sqx/modules/file/utils/FileUploadUtils.java +++ b/src/main/java/com/sqx/modules/file/utils/FileUploadUtils.java @@ -16,9 +16,14 @@ import java.net.URL; import java.nio.file.Files; import java.util.Base64; +import javax.imageio.IIOImage; import javax.imageio.ImageIO; +import javax.imageio.ImageWriteParam; +import javax.imageio.ImageWriter; +import javax.imageio.stream.FileImageOutputStream; import javax.xml.bind.DatatypeConverter; import java.util.Date; +import java.util.Iterator; /** * 文件上传工具类 @@ -144,26 +149,38 @@ public class FileUploadUtils // } catch (Exception e) { // System.out.println("压缩失败:" + e.getMessage()); // } + try { + File inputFile = new File(pathFileName); // 输入图片文件 + File outputFile = new File(pathFileName); // 输出图片文件 + float quality = 0.5f; // 压缩质量,范围0.0到1.0 + compressImage(inputFile, outputFile, quality); + } catch (IOException e) { + e.printStackTrace(); + } return pathFileName; } - public static byte[] compressImage(File imageFile, float scale) throws IOException { - BufferedImage originalImage = ImageIO.read(imageFile); - // 保存缩放后的图片到输出流 - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - Image compressedImage = originalImage.getScaledInstance( - (int)(originalImage.getWidth() * scale), - (int)(originalImage.getHeight() * scale), - Image.SCALE_SMOOTH); - BufferedImage outputImage = new BufferedImage( - compressedImage.getWidth(null), - compressedImage.getHeight(null), - BufferedImage.TYPE_INT_RGB); - outputImage.createGraphics().drawImage(compressedImage, 0, 0, null); - ImageIO.write(outputImage, "png", outputStream); // 或者 "png" 如果是PNG图片 + public static void compressImage(File inputFile, File outputFile, float quality) throws IOException { + // 读取图片 + BufferedImage image = ImageIO.read(inputFile); - return outputStream.toByteArray(); + // 获取图片写入工具 + Iterator writers = ImageIO.getImageWritersByFormatName("jpeg"); + ImageWriter writer = writers.next(); + + // 设置写入参数 + ImageWriteParam param = writer.getDefaultWriteParam(); + param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); + param.setCompressionQuality(quality); // 设置压缩质量 + + // 将BufferedImage写入文件 + FileImageOutputStream output = new FileImageOutputStream(outputFile); + writer.setOutput(output); + writer.write(null, new IIOImage(image, null, null), param); + + output.close(); + writer.dispose(); } /** * 编码文件名