Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
4ca9f67d08
|
@ -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();
|
||||
}
|
||||
/**
|
||||
* 编码文件名
|
||||
|
|
Loading…
Reference in New Issue