LoginSignup
1
3

More than 3 years have passed since last update.

Javaでアスキーアート

Last updated at Posted at 2019-09-18

ログをデコりたいと思って遊んでみた備忘録。
文字をアスキーアートにします。
全部Javaの標準ライブラリで作れます。
【参考】https://www.baeldung.com/ascii-art-in-java
※上記をお手本に、ちょいちょい動かなかったところを手直し

1. クラス作成

ASCIIService.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!"));
    }
}

2. 実行

eclipseを使っていたら、
クラスを右クリック>実行>Javaアプリケーション
image.png

パスが通っていればコマンド実行もできる

パスの通し方 https://www.javadrive.jp/start/install/index4.html
コマンド実行の仕方 https://pentan.info/java/command_line.html
image.png

備考. もっと簡単にやりたい

ライブラリを利用すると1行でつくれるみたいです
https://qiita.com/hoge390281/items/808b9e9afddf5db41f20
image.png
シンプル!かわいい!

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3