用Java进行ASCII艺术
我想解码日志并试验,这是备忘录。
我将字符转换为ASCII艺术。
这全部都可以用Java的标准库来实现。
【参考】https://www.baeldung.com/ascii-art-in-java
※根据上述示例,我适当地修改了一些不能正常工作的部分。
创建班级
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class ASCIIService {
/**
* アスキーアートを作るメソッド.
* @param str アスキーアートにしたい文字
* @return StringBuilder アスキーアートになった文字
*/
public static StringBuilder createAscii(String str) {
// 生成するグラフィックのサイズ
int height =30;
int width = 200;
// 描写開始位置
int startX = 2;
int stratY = 20;
// フォントを設定
Font font = new Font("Arial", Font.BOLD, 14);
StringBuilder sysout = new StringBuilder("\n");
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = bufferedImage.getGraphics();
// テキストをgraphicに変換
Graphics2D g = (Graphics2D) graphics;
g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g.setFont(font);
g.drawString(str, startX, stratY);
// graphicをもとにしてアスキーアートに書き起こし
for (int y = 0; y < height; y++) {
StringBuilder stringBuilder = new StringBuilder();
for (int x = 0; x < width; x++) {
stringBuilder.append(bufferedImage.getRGB(x, y) == -16777216 ? " " : "@");
}
if (stringBuilder.toString().trim().isEmpty()) {
continue;
}
sysout.append("\n" + stringBuilder);
}
sysout.append("\n");
return sysout;
}
public static void main(String[] args) {
// 実行
System.out.println(createAscii("PROCESS START!"));
}
}