java - 使用 spring-boot 应用程序自动压缩/优化图像

标签 java spring tomcat spring-boot image-compression

有没有办法在 spring-boot-application 中自动压缩/优化图像? 因为在我的应用程序中,用户可以自己将任何图像放入文件夹中,所以我无法确定,它们是以最佳方式压缩的。而且由于它们不是通过应用程序上传的,所以我也无法创建优化版本。

所以我想做的是在请求图像时压缩/优化图像,并可能将它们保存在一种“图像缓存”中一段时间​​。

或者是否有一个 tomcat/apache-module,它已经可以开箱即用地做这种事情了?

谢谢你的帮助

最佳答案

您可以使用javax.imageio 的类和接口(interface)来压缩给定的图像。下面是 JPG 图像的图像压缩示例。您可以在 spring boot 应用程序中将以下主要方法代码添加到您的服务中。

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

public class ImageCompression {
    public static void main(String[] args) throws FileNotFoundException, IOException{
        File imageFile = new File("YOUR_IMAGE.jpg");
        File compressedImageFile = new File("YOUR_COMPRESSED_IMAGE.jpg");

        InputStream inputStream = new FileInputStream(imageFile);
        OutputStream outputStream = new FileOutputStream(compressedImageFile);

        float imageQuality = 0.3f;

        //Create the buffered image
        BufferedImage bufferedImage = ImageIO.read(inputStream);

        //Get image writers
        Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName("jpg");

        if (!imageWriters.hasNext())
            throw new IllegalStateException("Writers Not Found!!");

        ImageWriter imageWriter = (ImageWriter) imageWriters.next();
        ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream);
        imageWriter.setOutput(imageOutputStream);

        ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();

        //Set the compress quality metrics
        imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        imageWriteParam.setCompressionQuality(imageQuality);

        //Created image
        imageWriter.write(null, new IIOImage(bufferedImage, null, null), imageWriteParam);

        // close all streams
        inputStream.close();
        outputStream.close();
        imageOutputStream.close();
        imageWriter.dispose();
    }
}

关于java - 使用 spring-boot 应用程序自动压缩/优化图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45659889/

相关文章:

java - 如何在现有 Spring Hibernate 应用程序中包含 Spring JPA

java - 自定义 JSTL 函数始终返回 false

java - eclipse 是否带有完整的内置 tomcat 服务器?

java - 模拟 Mockito 中我们无法显式分配的内容

java - HTTP 状态 404,请求的资源不可用。我犯了什么错误? Tomcat 6.0

java - 如何使用 lzma 压缩创建 zip

java - 路由映射不起作用

java - 如何使多个 REST 请求成为事务性/原子性的?

Tomcat 窗口打印错误并关闭

Apache mod_jk 与 jetty 和 tomcat 在一起