做项目的时候上传总是避免不了,如果上传的图片过大,占用空间会大,前端在进行加载展示的时候耗时也会长
压缩大小分为很多种:剪裁图片,等比缩放,降低质量等…
个人感觉,降低图片质量和之前差别不大,如果图片有什么特殊的大小要求或其他要求什么的,可以按照需要进行自行选择
公共代码
//在yml和properties里面配置,这样的也可以放到nacos,哪个都可以@Value("${file.upload.path}")private String fileUploadPath;@PostMapping("test")public void test(@RequestBody(required = false) MultipartFile multipartFile) throws IOException {//模拟上传到服务器//上传之后的文件File file = new File(fileUploadPath,multipartFile.getOriginalFilename());//上传multipartFile.transferTo(file);//获取文件名称String originalFilename = multipartFile.getOriginalFilename();//不带后缀的文件名String headName = originalFilename.substring(0, originalFilename.indexOf("."));//获得文件的扩展名(后缀名),扩展名不带“.”String extName = FileNameUtil.extName(originalFilename);File smallFile = new File(fileUploadPath,"small"+multipartFile.getOriginalFilename());File smallFileJpg= new File(fileUploadPath,"small"+headName+".jpg");Date sd = new Date();//图片操作处/**代码在这里**///图片操作处Date ed = new Date();System.out.println(ed.getTime()-sd.getTime());}
Hutool
pom依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.4.1</version></dependency>
缩放图片:
相比之前图片大小发生改变
//图片操作处ImgUtil.scale(FileUtil.file(file),FileUtil.file(smallFile),0.5f//缩放比例);//图片操作处
裁剪图片
Rectangle(x, y, width, height)
从图片左上角开始,x为横向移动距离,y为竖向
width为取得宽度(从左往右),height为取得高度(从上往下)
ImgUtil.cut(FileUtil.file(file),FileUtil.file(smallFile),//裁剪的矩形区域new Rectangle(0, 0, 0, 0));
图片类型转换
支持GIF->JPG、GIF->PNG、PNG->JPG、PNG->GIF(X)、BMP->PNG等
ImgUtil.convert(FileUtil.file(file),FileUtil.file(smallFileJpg));
图片压缩
注:图片压缩只支持Jpg文件,所以需要用到图片类型转换,也可以自定义
if ("jpg".equals(extName)){Img.from(FileUtil.file(file)).setQuality(0.5)//压缩比率.write(FileUtil.file(smallFile));}else {Img.from(FileUtil.file(file)).setQuality(0.5)//压缩比率.write(FileUtil.file(smallFileJpg));}
Thumbnails
pom依赖:
<dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>[0.4,0.5)</version></dependency>
压缩图片
降低图片质量
Thumbnails.of(file).scale(1f).outputQuality(0.5f)//0-1数字越高,质量越高,占用越大.toFile(smallFileJpg);
还有一种方式
Thumbnails.of(file).scale(1f).toFile(smallFileJpg);
缩放图片
Thumbnails.of(file).scale(0.5f).toFile(smallFileJpg);
所有的测试都会有误差200ms左右,读写速度可能会影响,上传服务器会受到网络的影响
如果觉得《图片上传 图片压缩大小》对你有帮助,请点赞、收藏,并留下你的观点哦!