【问题标题】:Automatic image compression/optimization with spring-boot application使用 spring-boot 应用程序自动压缩/优化图像
【发布时间】:2018-01-21 10:17:22
【问题描述】:

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

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

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

感谢您的帮助

【问题讨论】:

    标签: java spring tomcat spring-boot image-compression


    【解决方案1】:

    您可以使用javax.imageio 的类和接口来压缩给定的图像。下面是 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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 1970-01-01
      • 2018-08-03
      • 2018-01-30
      • 2018-07-30
      • 2016-02-16
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多