えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ターミナルに画像を描画するプログラムを作った。

 もうあっという間に年の瀬となってしまいました…

 今年は、コロナ禍での専攻科受験をパスして一安心かと思ったら、初めての卒研(+α)で学会発表3件で文章作成であっという間に時間が過ぎてしまいました。学業のほうは、GPA評価になったおかげで昨年度以上に上がったんですけどね。シンプルに学業だけで決まらないというのもなんだか今の時代を表しているような気がします。あと、2年しか学生をできないと考えると、なにかは成し遂げたいと焦る気持ちもあります。

本編

 今回は、「無駄なもの」を作りました。何をするかはとても簡単。いつも皆さん(?)が使うコマンドプロンプトをイメージビューワーとして使用するプログラムです。

Githubリンクはこちらです。

GitHub - Ar-Ray-code/draw_on_terminal: This program draws images or videos on the terminal.

 もともとはPythonでos.systemを使って直接シェルを呼び出そうと思っていたのですが、実行ファイル(バイナリ)を作りたかったのと、結構遅い気がしたので、C++で書いていたら、このまま実用レベルまで作りこみたい!と思い、いろいろオプションを追加するようになり、2日くらいかけてプログラムを作成しました。

 使用法は、README.mdを見てください。このプログラムは、jpgなどの画像だけでなくmp4動画なども再生できます。ここでは特に動画を見せませんが、youtube_dl(PythonYoutubeダウンロードツール)とかをつかって動画を持ってきて再生してみるといいと思います。再生時は、デフォルトのサイズ(80x23)で見ることをお勧めします。描画速度に限界があるので、サイズを大きくしすぎると、再生が極端に遅くなります。また、リアルタイムな制御をしていないため、再生時間は実際の動画再生と一致しません。今のところ自ら実装をしようとも思っていませんが、アドバイスがあればありがたいです。

 残念ながら、デスクトップ環境でしか使えないので、catコマンドみたいな感じでCUI環境で写真を見るなどの用途に使えません。そこらへんも作りたいなーと思っています。意外と役に立つかもしれません。

 乱数を用いて描画しているため、どんないちゃもんがきても、「いや、これは乱数を表示しているだけで、絵に見えるのは気のせいですよ!」みたいな反論が可能になります。マイクラ実況者が作るコンクリートの壁や羊毛の島みたいなものと同じですね!

 おそらく誰かは作っているとは思いますが、個人的には、「私の彼女はUbuntuターミナルの中にいます!」という変な方向性のネタを作れたのは収穫かな(?)と思います。

f:id:Ray_ar:20201230164415p:plain
ターミナルへの表示例。プロ生ちゃんの壁紙を(勝手に)拝借しています

 ただ、絶対的な「推し」を見つけられていないので、せっかくの冬期休業なので何かアニメでも視聴したいなーと思っています。

よいお年を!