non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Go言語でコマンドプロンプトに画像を表示するコマンドを作って、Vimの:terminalで表示させた

おはようございます。保育参観後、次男は熱を出し、また、長期化して、実家暮らしかもと冷や冷やしましたが、すぐに回復して、長男の誕生日イベントに奥さんと映画を行ってこれました。kjunichiです。

背景

ANSIエスケープで端末に画像を表示するものは多く出回っていて、自分もmacOS上ではnode.js実装のansi-canvasのexampleのimgcatを 愛用している。

しかし、事前準備なしでWindowsコマンドプロンプトに表示するものはなかなか見つからなかった。コマンドプロンプトにも一部の文字に 色を付けて表示することは可能なので、色数は限定されそうだが、原理的には出来なくなさそうだった。が、 Windowsの直接のAPIだと、Windowsでの開発歴が浅い自分には、難易度が高かった、ANSIエスケープ並みの手軽なAPIで これを実現するものがないものかと、物色していたところ、termbox-goなるライブラリを知った。

試行錯誤

8色しか出せなそう?

16色行けそう

GoのImageの内部のピクセル値は最大65535だった

このツイートのように、termbox-goで任意の場所に色を出せるようになったものの、JPEGファイルをGoで処理して画素値を取得して、 termbox-goでの色に割り当てようとして、なかなか画素値が最大255という思い込みがあり、上手くできないでいた。

インパクトがある画像が功を奏して、湘南新宿ラインの炎上ツイート以来のリツーイト数を獲得できた。

Vimの:terminalは発展中

と、ツイートしてしまい、Vim界の大物であり、ツイートからSIer所属でお子さんもおり、自分と境遇が近く、勝手に親近感もってる@mattn_jpさんから

と返信あり、速攻でGistに張り付け、

返信したところ、すぐに確認して頂き、

とご回答頂き、自分のところのソースが古かったので、最新のVimでは白も無事表示されました。@mattn_jpさんありがとうございました!

成果物

初期公開時ではJPEGファイルのみだったが、今はURLにも対応して、PNGJPEGなら表示出来る ようになった。

f:id:kjw_junichi:20170819094059p:plain

関連記事