繁体   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