1.引言
服务器配置比较低,打开网站时加载1MB+的图片 速度很慢,影响客户体验。所以从网上找了java修改图片大小的方法,这里记录一下 以备以后不时之需。我这里设置的是宽240,,高135 按照16:9的比例设置。
修改之后的图片大小在100kb左右
16:9的比例其他参数:
3840×2160 2560X1440 1920×1080 1600×900 1366×768 1280×720 1024×576
960×540 854×480 720×405 640×360 480×270 320×180
2.代码
@RequestMapping("/admin/fileUpload")
@ResponseBody
public Map<String, Object> fileUpload(HttpServletRequest request,
@RequestParam("uploadFile") MultipartFile uploadFile){
Map<String, Object> map = new HashMap<String, Object>();
try {
//原文件名后缀
String fileEnd = FilenameUtils.getExtension(uploadFile.getOriginalFilename());
//新文件名以uuid为名
String fileUUID = CommonsUtil.getUUID();
//获取当前项目部署的地址,也可以直接指定路径,D://blogFile//xx.jpg
//String realPath = request.getSession().getServletContext().getRealPath("//blogFile//"+TimeUtil.curYearMonthDay());
String realPath = "C://blogFile//"+TimeUtil.curYearMonthDay();
File dirs=new File(realPath);
if(!dirs.exists()){//判断文件夹是否存在
System.out.println("文件夹不存在,进行创建。");
dirs.mkdirs();//不存在就创建
}
//创建file对象,新地址新名称 原上传图片所需
//File newFile=new File(realPath,fileUUID+"."+fileEnd);
//上传图片时对图片按照16:9的比例压缩240*135
//读取图片
BufferedInputStream in = new BufferedInputStream(uploadFile.getInputStream());
//字节流转图片对象
Image bi =ImageIO.read(in);
//构建图片流 按照16:9的比例 设置宽高 240*135
//宽240 高135 我这里直接写死了 也可以写成参数形式的。
BufferedImage tag = new BufferedImage(240, 135, BufferedImage.TYPE_INT_RGB);
//绘制改变尺寸后的图
tag.getGraphics().drawImage(bi, 0, 0, 240, 135, null);
//输出流
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(realPath+"//"+fileUUID+"."+fileEnd));
ImageIO.write(tag, fileEnd,out);
in.close();
out.close();
//原上传图片方法
//uploadFile.transferTo(newFile);
//FileUtils.copyInputStreamToFile(uploadFile.getInputStream(), newFile);//第二种原上传图片方法
System.out.println("图片地址:"+realPath+"//"+fileUUID+"."+fileEnd);
map.put("sign", "success");
} catch (Exception e) {
e.printStackTrace();
map.put("sign", "error");
map.put("msg", e.toString());
}
return map;
}
一点小建议
因为java是跨语言 所以路径符最好使用/
在java中路径一般用"/"
windows中的路径一般用"\"
linux、unix中的路径一般用"/"