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

프로그램에서 이미지를 처리하고 편집하는 작업은 매우 일반적입니다. 자바에서 이미지를 터미널에서 크롭하는 작업은 Jansi 라이브러리를 사용하여 간단하게 할 수 있습니다. Jansi는 터미널에서 ANSI 이스케이프 코드를 사용하여 색상, 스타일 등을 처리하는 라이브러리입니다.

아래는 Jansi를 사용하여 자바에서 터미널에서 이미지를 크롭하는 예제 코드입니다.

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

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

public class TerminalImageCropExample {
    public static void main(String[] args) throws IOException {
        // 이미지 파일 경로 설정
        String imagePath = "path/to/image.png";

        // 이미지 파일 로드
        BufferedImage image = ImageIO.read(new File(imagePath));

        // 이미지 크롭할 영역 설정
        int cropX = 100;
        int cropY = 100;
        int cropWidth = 200;
        int cropHeight = 200;

        // 크롭된 이미지 생성
        BufferedImage croppedImage = image.getSubimage(cropX, cropY, cropWidth, cropHeight);

        // 터미널에 이미지 출력
        AnsiConsole.systemInstall();
        System.out.print(Ansi.ansi().eraseScreen());
        for (int y = 0; y < croppedImage.getHeight(); y++) {
            for (int x = 0; x < croppedImage.getWidth(); x++) {
                Color color = new Color(croppedImage.getRGB(x, y));
                Ansi.Color ansiColor = Ansi.Color.rgb(color.getRed(), color.getGreen(), color.getBlue());
                System.out.print(Ansi.ansi().fg(ansiColor).a(" ").reset());
            }
            System.out.println();
        }
        AnsiConsole.systemUninstall();
    }
}

위 예제 코드에서는 path/to/image.png 경로에 있는 이미지를 로드하고, cropX, cropY, cropWidth, cropHeight 변수를 사용하여 크롭할 영역을 설정합니다. 그 후, image.getSubimage(cropX, cropY, cropWidth, cropHeight) 메서드를 사용하여 크롭된 이미지를 생성합니다.

마지막으로, AnsiConsole.systemInstall()AnsiConsole.systemUninstall()를 호출하여 ANSI 이스케이프 코드를 사용할 수 있게 설정하고, Ansi.ansi().fg(ansiColor).a(" ").reset()를 사용하여 각 픽셀의 색상을 터미널에 출력합니다.

Jansi 라이브러리를 사용하면 자바에서 터미널에서 이미지를 처리하는 작업을 간단하게 할 수 있습니다. 이를 활용하여 이미지를 크롭하고 터미널에 출력하는 예제를 살펴보았습니다.

참고 링크: