Java实现等比例压缩
1. 使用Java源生类实现
2. 使用第三方插件(Thumbnailator)
开发步骤:
- 创建工程
- 编写页面
- 编写Controller
- 编写业务逻辑
- HTML代码
<!DOCTYPE HTML>
<html>
<head>
<title>Java实现图片等比例压缩</title>
</head>
<body>
<form action="uploadFile/upload" method="post" enctype="multipart/form-data">
<input type="file" name="fileNamePath" />
<input type="submit" value="提交" />
</form>
</body>
</html>
- 控制器
@RequestMapping("upload")
public String thumbnail(@RequestParam("fileNamePath") CommonsMultipartFile file, HttpSession session, Map<String, Object> map) {
// 图片保存的的文件名称
String uploadPath = "images";
// 项目发布的路径
String realUploadPath = session.getServletContext().getRealPath(uploadPath);
String imgeUrl = "";
String thumbnailImageUrl = "";
// 上传图片
imgeUrl = uploadService.uploadImage(file, uploadPath, realUploadPath);
// 压缩图片
thumbnailImageUrl = thumbnailService.thumbnail(file, uploadPath, realUploadPath);
map.put("imgeUrl", imgeUrl);
map.put("thumbnailImageUrl", thumbnailImageUrl);
return "showImage";
}
- 业务逻辑
- 上传图片
@Override
public String uploadImage(CommonsMultipartFile file, String uploadPath, String realUploadPath) {
InputStream is = null;
OutputStream os = null;
try {
is = file.getInputStream();
String des = realUploadPath + File.separator + file.getOriginalFilename();
os = new FileOutputStream(des);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = is.read(buffer)) > 0) {
os.write(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return uploadPath + File.separator + file.getOriginalFilename();
}
- Thumbnailator 等比例压缩图片
public static final int WINDTH = 68;
public static final int HEIGHT = 68;
public String thumbnail(CommonsMultipartFile file, String uploadPath, String realUploadPath) {
try {
String des = realUploadPath + "/thum_" + file.getOriginalFilename();
Thumbnails.of(file.getInputStream()).size(WINDTH, HEIGHT).toFile(des);
} catch (IOException e) {
e.printStackTrace();
}
return uploadPath + "/thum_" + file.getOriginalFilename();
}
- Java源生等比例压缩图片
public String thumbnail(CommonsMultipartFile file, String uploadPath, String realUploadPath) {
OutputStream os = null;
String desc = realUploadPath + "/thum_" + file.getOriginalFilename();
try {
os = new FileOutputStream(desc);
Image image = ImageIO.read(file.getInputStream());
int width = image.getWidth(null);// 获得原图的宽度
int height = image.getHeight(null);// 获得原图的高度
int rete1 = width / WIDTH;// 宽度缩略比例
int rete2 = height / HEIGHT;// 高度缩略比例
int rete = 0;
if (rete1 > rete2) {
rete = rete1;
} else {
rete = rete2;
}
// 计算缩略图最总的宽度和高度
int newWidth = width / rete;
int newHeight = height / rete;
BufferedImage bufferedImage = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
bufferedImage.getGraphics().drawImage(image.getScaledInstance(newWidth, newHeight, image.SCALE_SMOOTH), 0, 0, null);
String imageType = file.getContentType().substring(file.getContentType().indexOf("/") + 1);
ImageIO.write(bufferedImage, imageType, os);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != os) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return uploadPath + "/thum_" + file.getOriginalFilename();
}
附件一:Maven添加Thumbnailatorjar
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>