簡體   English   中英

使用spring-boot應用程序進行自動圖像壓縮/優化

[英]Automatic image compression/optimization with spring-boot application

在spring-boot-application中,有沒有辦法自動壓縮/優化圖像? 就像在我的應用程序中一樣,用戶可以自己將任何圖像放在文件夾中,我無法確定,它們是最佳壓縮方式。 而且由於它們不是通過應用程序上傳的,因此我也無法創建優化版本。

因此,我想做的就是在請求圖像后對其進行壓縮/優化,也許將它們保存在一種“圖像緩存”中一段時間​​。

還是有一個tomcat / apache-module,這種東西已經開箱即用了?

謝謝你的幫助

您可以使用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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM