图片上传,图片压缩大小

做项目的时候上传总是避免不了,如果上传的图片过大,占用空间会大,前端在进行加载展示的时候耗时也会长

压缩大小分为很多种:剪裁图片,等比缩放,降低质量等…
个人感觉,降低图片质量和之前差别不大,如果图片有什么特殊的大小要求或其他要求什么的,可以按照需要进行自行选择

公共代码

	//在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());
        //上传文件存放地址,后缀名为.jpg的
        File smallFileJpg= new File(fileUploadPath,"small"+headName+".jpg");
      
        Date sd = new Date();
        //图片操作处
        /**代码在这里:例如**/
       //file源文件,转换到smallFile文件,并进行存储
        ImgUtil.scale(
	        FileUtil.file(file),
	        FileUtil.file(smallFile),
	        0.5f//缩放比例
		);
        //图片操作处
        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//缩放比例
	);
	//图片操作处
图片格式图片大小压缩之后大小需要时间(大约)缩放比例
.jpg951KB155KB759ms0.5
.png2.00MB1.15MB867ms0.5

裁剪图片

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));
       }
图片格式图片大小压缩之后大小需要时间(大约)压缩比例
.jpg951KB312KB420ms0.5
.png2.00MB352KB1139ms0.5

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);
图片格式图片大小压缩之后大小需要时间(大约)压缩比例
.jpg951KB312KB463ms0.5
.png2.00MB352KB1692ms0.5

还有一种方式

	Thumbnails.of(file)
               .scale(1f)
               .toFile(smallFileJpg);
图片格式图片大小压缩之后大小需要时间(大约)
.jpg951KB591KB540ms
.png2.00MB400KB1769ms

缩放图片

		Thumbnails.of(file)
              .scale(0.5f)
              .toFile(smallFileJpg);
图片格式图片大小压缩之后大小需要时间(大约)缩放比例
.jpg951KB136KB428ms0.5
.png2.00MB122KB1005ms0.5

所有的测试都会有误差200ms左右,读写速度可能会影响,上传服务器会受到网络的影响

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值