【问题标题】:How to reduce PNG/JPEG file size in spring boot如何在 Spring Boot 中减小 PNG/JPEG 文件的大小
【发布时间】:2021-12-01 15:39:52
【问题描述】:

我想在保存图像的同时减小文件大小。 请将此代码作为参考。 以及如何减小文件大小。

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 spring-boot spring-mvc spring-data r.java-file


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 2012-03-26
      • 2012-11-04
      • 1970-01-01
      • 2019-06-09
      • 2017-01-25
      • 1970-01-01
      • 2018-12-01
      • 2012-08-23
      相关资源
      最近更新 更多