Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

posted at

updated at

アスキーアートで作るLTスライド

はじめに

みなさんは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


Tux君をAAにするとこんな感じになります
スクリーンショット 2020-12-04 003221.jpg

スライドを動かす為のプログラムの作成

コマンドを使ってアスキーアートを生成するので、シェルスクリプトのほうが楽なはずなんですが、私は書けないので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の文字サイズを調整して先ほどのコードを実行するとこのようになります
dokupe_resize_2.png
また、jp2a をLinuxコマンドとして使う理由は、何故かWindows版だと表示速度がかなり低下するからです。

まとめ

  • jp2a はjpeg画像しかAAに変換できない
  • スライドは任意の方法で書きましょう
  • スライドは矢印キーで操作できたら便利

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?