[java] Jansi를 활용하여 자바에서 터미널에서 이미지 필터 적용하기

이번 포스트에서는 Jansi라이브러리를 사용하여 자바에서 터미널에서 이미지 필터를 적용하는 방법을 알아보겠습니다. Jansi는 자바에서 ANSI 이스케이프 시퀀스를 처리하기 위한 라이브러리로, 터미널에 컬러 및 스타일을 적용하는 기능을 제공합니다.

다음은 Jansi 라이브러리를 사용하기 위한 의존성을 추가하는 Maven 종속성입니다:

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>1.18</version>
</dependency>

이제 이미지 필터를 적용할 자바 코드를 작성해보겠습니다. 아래의 코드는 Jansi를 사용하여 터미널에서 이미지를 로드하고 grayscale 필터를 적용하는 예제입니다:

import org.fusesource.jansi.AnsiConsole;
import org.fusesource.jansi.Ansi;

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

public class TerminalImageFilter {

    public static void main(String[] args) {
        AnsiConsole.systemInstall();

        // 이미지 파일 로드
        File imageFile = new File("path/to/image.jpg");
        try {
            BufferedImage image = ImageIO.read(imageFile);

            // grayscale 필터 적용
            for (int y = 0; y < image.getHeight(); y++) {
                for (int x = 0; x < image.getWidth(); x++) {
                    int rgb = image.getRGB(x, y);
                    int gray = (int) (0.3 * ((rgb >> 16) & 0xFF) + 0.59 * ((rgb >> 8) & 0xFF) + 0.11 * (rgb & 0xFF));
                    image.setRGB(x, y, (gray << 16) | (gray << 8) | gray);
                }
            }

            // 터미널에 출력
            for (int y = 0; y < image.getHeight(); y++) {
                for (int x = 0; x < image.getWidth(); x++) {
                    int rgb = image.getRGB(x, y);
                    int r = (rgb >> 16) & 0xFF;
                    int g = (rgb >> 8) & 0xFF;
                    int b = rgb & 0xFF;

                    // ANSI 이스케이프 시퀀스를 사용하여 컬러를 적용
                    Ansi.Color color = Ansi.Color.rgb(r, g, b);
                    System.out.print(Ansi.ansi().fg(color).a("█").reset());
                }
                System.out.println();
            }
        } catch (IOException e) {
            System.err.println("이미지를 로드하는 중 오류가 발생했습니다: " + e.getMessage());
        }

        AnsiConsole.systemUninstall();
    }

}

위의 코드는 path/to/image.jpg 경로에 있는 이미지 파일을 로드하고 grayscale 필터를 적용합니다. 그런 다음 터미널에 ANSI 이스케이프 시퀀스를 사용하여 컬러를 적용하여 필터링 된 이미지를 출력합니다.

이 예제를 실행하려면 Jansi 라이브러리를 클래스 패스에 추가하고 path/to/image.jpg를 실제 이미지 파일의 경로로 대체하면 됩니다. 이미지 파일은 JPG, PNG 또는 BMP 형식이여야 합니다.

이제 자바에서 터미널에서 이미지 필터를 적용하는 방법을 알게 되었습니다. Jansi 라이브러리를 사용하면 터미널에서 다양한 스타일과 컬러를 적용할 수 있는 기능들을 쉽게 구현할 수 있습니다. 추가 자세한 정보는 Jansi 공식 문서를 참조하세요.