Merge remote-tracking branch 'origin/master'

This commit is contained in:
曹磊 2024-07-16 22:59:18 +08:00
commit 4ca9f67d08
1 changed files with 42 additions and 15 deletions

View File

@ -14,11 +14,18 @@ import java.awt.image.BufferedImage;
import java.io.*;
import java.net.URL;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
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;
import java.util.Random;
/**
* 文件上传工具类
@ -144,26 +151,46 @@ public class FileUploadUtils
// } catch (Exception e) {
// System.out.println("压缩失败:" + e.getMessage());
// }
try {
Date date = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
Random random = new Random();
int randomNumber = random.nextInt(900000) + 100000; // 生成一个介于100000到999999之间的随机数
String outfilename = fileName.substring(0,fileName.lastIndexOf("/"))+"/"+sdf.format(date)+randomNumber+fileName.substring(fileName.lastIndexOf("."),fileName.length());
File inputFile = new File(baseDir + File.separator + fileName);
File outputFile = new File(baseDir + File.separator + outfilename); // 输出图片文件
String retImgName = "/file/uploadPath/"+outfilename;
float quality = 0.45f; // 压缩质量范围0.0到1.0
compressImage(inputFile, outputFile, quality);
pathFileName = retImgName;
} 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();
}
/**
* 编码文件名