[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 공식 문서를 참조하세요.