はじめに
みなさんはAA(アスキーアート)でLTをしてみたいと思ったことありますか?私はあります。
ということで今回はAAでスライドを作る方法を説明していきたいと思います
ひ つ よ う な も の
- Ubuntu 20.04(WSL)
- jp2a (コマンド)
- スライドを作ることができるSomething
- Windows Terminal(表示用)
- Pythonの実行環境
- AAでLTをしたいという無意味な意欲
スライドを作る
そもそもLTというのはスライドが必要です。Power Point等のスライド作成ソフトを開いて任意のスライドを作成してください。
作成したスライドをjpeg形式で出力する
jp2aはjpeg画像しかアスキーアートに変換できないという制約がある為、jpeg形式でスライドを出力し、新しく作ったディレクトリに入れておきましょう。また、スライドを動かすためのプログラムの記述を楽にするために、ファイル名を連番(拡張子なし)にします。
jpegで保存されたスライドを1から連番でリネームしてください
※ディレクトリ内のファイルがすべて連番でリネームされます
ls | awk '{ printf "mv %s %d\n", $0, NR }' | sh
試しにjp2aを使ってみる
jp2aをまだインストールしていない方は任意の方法でインストールしてください
sudo apt install jp2a
jp2a の使用方法
jp2a test.jpeg
24bit color ターミナル全体に表示
jp2a --color-depth=24 --term-zoom --clear test.jpeg
スライドを動かす為のプログラムの作成
コマンドを使ってアスキーアートを生成するので、シェルスクリプトのほうが楽なはずなんですが、私は書けないのでPythonで書きます(Pythonもまともに書けない)
import subprocess
import sys
import tty
import termios
import os
def getch():
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
try:
tty.setraw(fd)
return sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old)
# Unicode制御文字のエイリアス
EOT = 3
TAB = 9
ESC = 27
r = 114
# コマンドの設定
number = 1
comand2 = ["jp2a", "--clear","--term-zoom","--color-depth=24","--chars=BBBZKXNWM","1"]
# スライドの最大枚数
counter = len(os.listdir()) -1
subprocess.check_call(comand2)
# メインループ
while True:
key = ord(getch())
if key == EOT:
break
elif key == TAB:
#END
exit()
elif key == r:
#restart
number = 1
comand2[5] = str(number)
subprocess.check_call(comand2)
elif key == ESC:
key = ord(getch())
if key == ord('['):
key = ord(getch())
if key == ord('A'):
#up key
continue
elif key == ord('B'):
#down key
continue
elif key == ord('C'):
#right key
if number == counter:
continue
number += 1
comand2[5] = str(number)
subprocess.check_call(comand2)
continue
elif key == ord('D'):
#left key
if number == 1:
continue
number -= 1
comand2[5] = str(number)
subprocess.check_call(comand2)
continue
操作方法
左右キーで操作できます。何らかのコマンドを追加したい場合は上下キーに追加することをおすすめします。また、rキーで最初のスライドに戻ることができます。TABキーを押すと終了します。
Windows Terminalを使う理由
主に改行関連が関係しています。素のcmd.exeやPowerShellを使った場合改行関連で表示できるアスキーアートの細かさに限度ができてしまいます。Windows Terminalの場合その問題が起きないのでお勧めです。
Windows Terminalの文字サイズを調整して先ほどのコードを実行するとこのようになります
また、jp2a をLinuxコマンドとして使う理由は、何故かWindows版だと表示速度がかなり低下するからです。
まとめ
- jp2a はjpeg画像しかAAに変換できない
- スライドは任意の方法で書きましょう
- スライドは矢印キーで操作できたら便利
参考
- Python3 で 十字キーが入力された判定をとる方法
https://qiita.com/t4t5u0/items/605ad611cc02716e3b98 - ディレクトリ内のファイル名をまとめて変更(連番付与)する
https://qiita.com/NoName/items/fc59849ce7d497a7571a