[java] 자바에서 이미지 파일을 압축하는 방법

이미지 파일을 압축하는 방법은 자바에서 다양한 방식으로 수행할 수 있습니다. 이미지 파일의 크기를 줄여서 저장공간을 절약하거나, 웹 페이지에서 이미지를 빠르게 로딩하기 위해 압축할 수 있습니다. 이 글에서는 자바에서 이미지 파일을 압축하는 방법을 알아보겠습니다.

1. ImageIO를 사용한 압축

Java에서 제공하는 ImageIO 클래스를 활용하여 이미지 파일을 압축하는 방법은 다음과 같습니다.

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class ImageCompressionExample {

    public static void main(String[] args) {
        try {
            // 압축할 이미지 파일의 경로
            File originalFile = new File("original.jpg");
            
            // 이미지 파일을 읽어옴
            BufferedImage originalImage = ImageIO.read(originalFile);
            
            // 압축된 이미지 파일을 생성
            File compressedFile = new File("compressed.jpg");
            
            // 이미지 파일을 압축하여 저장
            ImageIO.write(originalImage, "jpg", compressedFile);
            
            System.out.println("압축 완료!");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드는 ImageCompressionExample 클래스에서 이미지 파일을 압축하는 예제입니다. 압축할 이미지 파일의 경로를 File 객체로 생성한 뒤, ImageIO.read() 메서드를 사용하여 이미지 파일을 읽어옵니다. 그리고 압축된 이미지 파일을 저장할 File 객체를 생성한 후, ImageIO.write() 메서드를 사용하여 이미지 파일을 압축하여 저장합니다. 마지막으로 압축 완료 메시지를 출력합니다.

2. Java Image Scaling 라이브러리 사용

ImageIO 클래스를 사용하는 대신에 Java Image Scaling 라이브러리를 활용하여 이미지 파일을 압축할 수도 있습니다. 이 라이브러리는 이미지 크기를 조절하고 압축하는 기능을 제공합니다.

먼저, Gradle 또는 Maven을 사용하여 프로젝트에 Java Image Scaling 라이브러리를 추가해야 합니다. Gradle의 경우, build.gradle 파일에 다음 의존성을 추가합니다.

dependencies {
    implementation 'com.mortennobel:java-image-scaling:0.8.6'
}

Maven의 경우, pom.xml 파일에 다음 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>com.mortennobel</groupId>
        <artifactId>java-image-scaling</artifactId>
        <version>0.8.6</version>
    </dependency>
</dependencies>

다음은 Java Image Scaling 라이브러리를 사용하여 이미지 파일을 압축하는 예제 코드입니다.

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.mortennobel.imagescaling.AdvancedResizeOp;
import com.mortennobel.imagescaling.RescaleOp;
import com.mortennobel.imagescaling.ThumpnailRescaleOp;

public class ImageCompressionExample {

    public static void main(String[] args) {
        try {
            // 압축할 이미지 파일의 경로
            File originalFile = new File("original.jpg");
            
            // 이미지 파일을 읽어옴
            BufferedImage originalImage = ImageIO.read(originalFile);
            
            // 이미지 크기를 조절하고 압축
            BufferedImage compressedImage = new RescaleOp(0.5f, 0.5f, RescaleOp.FILTER_LANCZOS).filter(originalImage, null);
            
            // 압축된 이미지 파일을 생성
            File compressedFile = new File("compressed.jpg");
            
            // 압축된 이미지 파일을 저장
            ImageIO.write(compressedImage, "jpg", compressedFile);
            
            System.out.println("압축 완료!");
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드는 Java Image Scaling 라이브러리의 RescaleOp 클래스를 사용하여 이미지 크기를 조절하고 압축하는 예제입니다. RescaleOp 생성자의 인자로는 가로 축 스케일, 세로 축 스케일, 그리고 필터 타입을 지정합니다. filter() 메서드는 입력 이미지에 스케일 변환을 적용한 결과를 반환합니다. 압축된 이미지 파일은 ImageIO.write() 메서드를 사용하여 저장됩니다.

이 글에서는 자바에서 이미지 파일을 압축하는 두 가지 방법을 소개했습니다. 필요한 경우, 이미지 파일의 크기를 조절하거나, 적절한 압축 기법을 사용하여 저장공간을 절약하고 웹 페이지의 성능을 향상시킬 수 있습니다.

참고 자료