图片压缩
This commit is contained in:
parent
afa9424f2e
commit
ae1fc7a3e5
|
@ -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();
|
||||
}
|
||||
/**
|
||||
* 编码文件名
|
||||
|
|
Loading…
Reference in New Issue