springboot图片压缩接口

1、引入压缩图片相关工具maven

		<dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.17</version>
        </dependency>

        <dependency>
            <groupId>org.sejda.imageio</groupId>
            <artifactId>webp-imageio</artifactId>
            <version>0.1.6</version>
        </dependency>

2、编写主要逻辑

package com.example.picturecompression;

import net.coobird.thumbnailator.Thumbnails;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

/**
 * @Author sandul
 * @Version 1.0
 * @Description:
 * @Date 2022/9/5 15:06
 */
@RestController
public class PicController {

    @Autowired
    private Environment environment;

    @PostMapping("/upload")
    public void picCompressionUpload(HttpServletResponse response, Integer picWidth, Integer picHeight, MultipartFile pic) {

        // Integer picWidth 传入的宽
        //  Integer picHeight 传入的高
        //  MultipartFile pic 传入的文件

        try (
                InputStream inputStream = new ByteArrayInputStream(pic.getBytes());
                ServletOutputStream outputStream = response.getOutputStream()
        ) {
            if (picWidth == null ) {
                // 如果没有传入宽,尝试从配置文件获取
                String width = environment.getProperty("picture.compress.width");
                picWidth = width == null ? null : Integer.valueOf(width);
            }
            if (picHeight == null ) {
                // 如果没有传入高,尝试从配置文件获取
                String height = environment.getProperty("picture.compress.height");
                picHeight = height == null ? null : Integer.valueOf(height);
            }
            Thumbnails.of(inputStream)
                    //picWidth:图片宽度
                    //picHeight:图片高度
                    .size(picWidth == null ? 1080 : picWidth, picHeight == null ? 1440 : picHeight)
                    .toOutputStream(outputStream);
            response.setCharacterEncoding("UTF-8");//响应编码
            response.setContentType(pic.getContentType());//响应文件类型
            response.setHeader("Content-Disposition","attachment;fileName="+pic.getOriginalFilename());//响应头
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3、基本配置

# 图片宽、高  压缩
picture.compress.width=1080
picture.compress.height=1920

# 服务器最大上传请求
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
spring.servlet.multipart.enabled=true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringBoot中,可以使用Thumbnails库对图片进行压缩。根据引用内容和的规则,当设定缩放的图片宽和高时,原来图片的宽和高比例会保持不变。如果设定的宽比原来的大,高比原来的小,最后缩完高会缩小到设定的高;如果设定的宽比原来的小,高比原来的大,最后缩完宽会缩小到设定的宽。 示例代码如下: ``` @Test void contextLoads() { try { Thumbnails.of("C:\\Users\\Administrator\\Desktop\\指定大小\\6.jpg") .size(1500, 400) .toFile("C:\\Users\\Administrator\\Desktop\\指定大小\\6-6.jpg"); } catch (IOException e) { System.out.println("e" + e); e.printStackTrace(); } } ``` 这段代码将指定的图片路径进行压缩,将宽度设定为1500像素,高度设定为400像素,然后保存为新的文件。同样,根据引用的规则,可以将宽度设定为400像素,高度设定为1500像素进行压缩。 你可以根据需要修改代码中的图片路径和设定的宽高值,然后运行该方法即可实现图片的压缩。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [springboot 整合thumbnailator- 图片压缩](https://blog.csdn.net/qq_42778001/article/details/121014322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值