spring mvc MultipartFile图片压缩 并返回MultipartFile图片
时间: 2023-10-17 07:36:14 浏览: 215
你可以使用Java的ImageIO类来压缩MultipartFile中的图片。下面是一个示例代码,演示了如何对MultipartFile中的图片进行压缩,并返回压缩后的MultipartFile对象。
```java
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ImageCompressor {
public MultipartFile compressImage(MultipartFile file, int maxWidth, int maxHeight, float quality) throws IOException {
BufferedImage originalImage = ImageIO.read(file.getInputStream());
// 计算图片缩放后的尺寸
int scaledWidth = originalImage.getWidth();
int scaledHeight = originalImage.getHeight();
if (scaledWidth > maxWidth) {
scaledWidth = maxWidth;
scaledHeight = (scaledWidth * originalImage.getHeight()) / originalImage.getWidth();
}
if (scaledHeight > maxHeight) {
scaledHeight = maxHeight;
scaledWidth = (scaledHeight * originalImage.getWidth()) / originalImage.getHeight();
}
// 创建缩放后的图片
BufferedImage resizedImage = new BufferedImage(scaledWidth, scaledHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, scaledWidth, scaledHeight, null);
g.dispose();
// 转换为字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(resizedImage, "jpg", outputStream);
byte[] bytes = outputStream.toByteArray();
// 创建压缩后的MultipartFile对象
ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes);
return new MyMultipartFile(inputStream, file.getOriginalFilename(), file.getContentType());
}
}
```
上述代码中的`maxWidth`和`maxHeight`参数用于指定压缩后的图片最大宽度和高度,`quality`参数用于指定图片的压缩质量(0.0到1.0之间)。你可以根据自己的需求来调整这些参数。
请注意,由于Spring的MultipartFile接口是只读的,无法直接修改其中的数据。因此,上述代码中创建了一个自定义的`MyMultipartFile`类,用于包装压缩后的字节数组。你需要自己实现这个类,并遵循MultipartFile接口的方法定义。
希望对你有帮助!如果有任何问题,请随时问我。
阅读全文