首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spring-boot应用程序自动进行图像压缩/优化

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

Stack Overflow用户
提问于 2017-08-13 19:33:16
回答 1查看 4.5K关注 0票数 4

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

因此,我想要做的是在请求图像时对它们进行压缩/优化,并可能将它们保存在一种“图像缓存”中一段时间。

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

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2017-08-13 23:51:01

你可以使用javax.imageio的类和接口来压缩给定的图片。下面是一个JPG图片压缩的例子。你可以在spring boot应用程序中将下面的main方法代码添加到你的服务中。

代码语言:javascript
复制
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();
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45659889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档