图片压缩

This commit is contained in:
yangjun 2024-07-16 20:31:31 +08:00
parent afa9424f2e
commit ae1fc7a3e5
1 changed files with 32 additions and 15 deletions

View File

@ -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<ImageWriter> 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();
}
/**
* 编码文件名