[java] 이미지 압축 및 해제

이미지를 압축하고 해제하는 것은 Java 프로젝트에서 자주 하는 작업 중 하나입니다. 이미지를 압축하여 저장 공간을 절약하거나 웹 애플리케이션에서 이미지를 전송할 때 대역폭을 절약할 수 있습니다. 반대로 이미지를 해제하면 원본 이미지를 복원하여 화질을 유지할 수 있습니다.

이미지 압축

Java에서 이미지를 압축하기 위해서는 javax.imageio 패키지와 ImageWriter 클래스를 활용할 수 있습니다. 아래 예제는 JPEG 형식으로 이미지를 압축하는 방법을 보여줍니다.

import java.io.File;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
import javax.imageio.stream.FileImageOutputStream;
import java.awt.image.BufferedImage;

public class ImageCompressor {
    public static void compressImage(File input, File output, float compressionQuality) throws Exception {
        BufferedImage image = ImageIO.read(input);
        
        ImageWriter jpgWriter = ImageIO.getImageWritersByFormatName("jpg").next();
        ImageWriteParam jpgWriteParam = new JPEGImageWriteParam(null);
        jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        jpgWriteParam.setCompressionQuality(compressionQuality);
        
        try (FileImageOutputStream fos = new FileImageOutputStream(output)) {
            jpgWriter.setOutput(fos);
            jpgWriter.write(null, new IIOImage(image, null, null), jpgWriteParam);
        } finally {
            jpgWriter.dispose();
        }
    }
}

위 코드에서 compressImage 메서드는 입력 이미지 파일과 출력 파일 경로, 그리고 압축 품질을 매개변수로 받아 이미지를 압축합니다.

이미지 해제

해제는 압축과 반대로 동작합니다. javax.imageio 패키지의 ImageReader 클래스를 사용하여 이미지를 해제할 수 있습니다. 아래는 JPEG 이미지를 해제하는 예제입니다.

import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.FileImageInputStream;
import java.awt.image.BufferedImage;
import java.io.File;

public class ImageDecompressor {
    public static void decompressImage(File input, File output) throws Exception {
        try (FileImageInputStream fis = new FileImageInputStream(input)) {
            ImageReader reader = ImageIO.getImageReadersByFormatName("jpg").next();
            reader.setInput(fis);

            BufferedImage image = reader.read(0);
            ImageIO.write(image, "jpg", output);
        }
    }
}

위 코드에서 decompressImage 메서드는 입력 이미지 파일과 출력 파일 경로를 매개변수로 받아 이미지를 해제합니다.

이제 여러분은 Java에서 이미지를 압축하고 해제하는 방법을 알게 되었습니다. 필요에 따라 이러한 기능을 사용하여 이미지 처리를 개선할 수 있을 것입니다.

참고 자료