8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

限界開発鯖Advent Calendar 2020

Day 11

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

Last updated at Posted at 2020-12-10

はじめに

みなさんは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に変換できない
  • スライドは任意の方法で書きましょう
  • スライドは矢印キーで操作できたら便利

参考

8
3
0

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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?