'JAVA이미지화질줄이기'에 해당되는 글 1건

  1. 2023.03.16 JAVA 이미지 용량 압축
Web&Spring2023. 3. 16. 12:41

스프링 프레임워크로 웹 사이트 운영하면서..이미지 표출때문에 느린 경우가 있다.

원본 사이즈 그대로 스트림으로 읽어와서 그런 문제가 발생을 할수있는데..

원본 다운로드 기능이 따로 있다면, img src로 보여지는것 자체는 압축을하여 용량을 낮춰 출력할 수 있다.

다만 화질은 조금 화질구리가 되지만..협의가 된상황이라면..괜춘..

ImageWriter 객체를 이용한다.

 

 

//이미지를 압축한다. 
public static void compressImage(File imageFile, String destination) throws Exception {
        File compressedImageFile = new File(destination);

        InputStream is = new FileInputStream(imageFile);
        OutputStream os = new FileOutputStream(compressedImageFile);

        float quality = 0.2f; //0.1 ~ 1.0까지 압축되는 이미지의 퀄리티를 지정
                              //숫자가 낮을수록 화질과 용량이 줄어든다.

        BufferedImage image = ImageIO.read(is);
        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");

        if (!writers.hasNext())
            throw new IllegalStateException("No writers found");

        ImageWriter writer = (ImageWriter) writers.next();
        ImageOutputStream ios = ImageIO.createImageOutputStream(os);
        writer.setOutput(ios);

        ImageWriteParam param = writer.getDefaultWriteParam();

        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(quality);
        writer.write(null, new IIOImage(image, null, null), param);
        is.close();
        os.close();
        ios.close();
        writer.dispose();

    }

 

 

destination 경로에 임시 파일을 압축하여 이미지를 새로 write 하고,

이미지는 이렇게 만들어졌으니 해당 destination 경로에 있는 파일로 outputStream 써주고

파일을 delete(); 해주면 될것..

Posted by 사슴영혼'-'