[java] Jansi를 사용하여 자바 프로그램에서 터미널에서 이미지 확대/축소하기

Jansi는 자바에서 ANSI 컬러 및 스타일을 지원하는 라이브러리입니다. 이 라이브러리를 사용하면 터미널에서 컬러 및 스타일을 적용한 텍스트를 출력할 수 있습니다. 이번 예제에서는 Jansi를 사용하여 터미널에서 이미지를 확대하거나 축소하는 방법을 알아보겠습니다.

Jansi 라이브러리 추가하기

먼저, 프로젝트에 Jansi 라이브러리를 추가해야 합니다. 아래와 같이 Maven을 사용한다면 pom.xml 파일에 다음 의존성을 추가합니다.

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

Maven을 사용하지 않는다면, Jansi를 다운로드하여 프로젝트의 라이브러리 경로에 추가하십시오.

이미지 확대/축소 기능 구현하기

이미지를 확대/축소하기 위해 ASCII 아트를 사용하겠습니다. ASCII 아트는 텍스트 문자로 구성된 그래픽으로 표현되는 이미지입니다. 각 문자는 픽셀을 나타내며, 크기에 따라 텍스트 문자의 밀도를 조절하여 이미지를 확대하거나 축소할 수 있습니다.

다음은 확대/축소된 이미지를 출력하는 자바 메소드입니다.

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

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

    String image = "xxxxxxx\nx     x\nx xxx x\nx x   x\nx xxx x\nx     x\nxxxxxxx";
    int scale = 2;

    printScaledImage(image, scale);

    AnsiConsole.systemUninstall();
  }

  private static void printScaledImage(String image, int scale) {
    String[] lines = image.split("\n");
    int height = lines.length;
    int width = lines[0].length();

    for (int y = 0; y < height; y++) {
      for (int sy = 0; sy < scale; sy++) {
        StringBuilder line = new StringBuilder();
        for (int x = 0; x < width; x++) {
          char pixel = lines[y].charAt(x);
          for (int sx = 0; sx < scale; sx++) {
            line.append(pixel);
          }
        }
        AnsiConsole.out.print(Ansi.ansi().eraseLine(Ansi.Erase.ALL).render(line.toString()));
        AnsiConsole.out.println();
      }
    }
  }
}

위의 코드에서, image 변수에 이미지를 ASCII 아트 형식으로 저장하고, scale 변수에 확대/축소 비율을 설정합니다. printScaledImage 메소드는 이미지를 확대/축소하여 출력하는 역할을 합니다.

프로그램 실행하기

위의 코드를 컴파일하고 실행해보겠습니다. 실행하면 터미널에 ASCII 아트 형식으로 저장된 이미지가 확대된 상태로 출력됩니다. scale 변수를 조정하여 확대/축소 비율을 변경할 수 있습니다.

마치며

이번 글에서는 Jansi를 사용하여 자바 프로그램에서 터미널에서 이미지를 확대하거나 축소하는 방법을 알아보았습니다. Jansi는 ANSI 컬러 및 스타일을 적용하여 터미널에 텍스트를 출력하는 데도 유용합니다. 자세한 내용은 Jansi 공식 문서를 참조하시기 바랍니다.

참고 자료: