簡體   English   中英

如何在 Spring Boot 中減小 PNG/JPEG 文件大小

[英]How to reduce PNG/JPEG file size in spring boot

我想在保存圖像的同時減小文件大小。 請拿這個代碼作為參考。 以及如何減小文件大小。

public void saveImage(MultipartFile image_one, MultipartFile image_two, MultipartFile image_three) throws Exception{
        System.out.println("Inside Save image Repo");
        
        String folder = "C:/Users/HP/Photos";
        byte[] bytes_one;
        try {
            bytes_one = image_one.getBytes();
            
            Path path1 = Paths.get(folder + image_one.getOriginalFilename()); 
            System.out.println("Path of 1st imagae : "+path1);
            
            Files.write(path1, bytes_one);
            
            System.out.println("Image-1 size : "+bytes_one.length);
        } catch (Exception e) {
            System.out.println("Inside Catch Block -> Image not found ");
            e.printStackTrace();
        }   
    }

您可以使用 Java javax.imageio庫並使用函數來壓縮圖像字節。

這應該做的工作:

public byte[] compressImage(MultipartFile image) throws IOException
{

    InputStream inputStream = image.getInputStream();
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

    float imageQuality = 0.3f;

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

    // Get image writers
    Iterator<ImageWriter> imageWriters = ImageIO.getImageWritersByFormatName("jpg"); // Input your Format Name here

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

    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);

    // Compress and insert the image into the byte array.
    imageWriter.write(null, new IIOImage(bufferedImage, null, null), imageWriteParam);

    byte[] imageBytes = outputStream.toByteArray();

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


    return imageBytes;
}

它返回壓縮的圖像bytes以便返回的值可以轉換為許多東西。 在您的情況下,在文件中...

byte[] compressedImageBytes = compressImage(imageOne);

Files.write(path1, bytesOne);

暫無
暫無

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

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