Sixel 情報 - ダメ出し Blog

[vt][sixel] [更新履歴]

リンク

資料

ハウツーなど

対応端末

対応ソフトウェア

ライブラリ、モジュール

ユーティリティなど

パッケージ

シェルで Sixel してみる

bash, zsh を前提とします。

端末が Sixel 対応しているかどうかを調べる

端末に DA1 (Primary Device Attributes) を問い合わせ、 Sixel 対応を示す属性値 4 が含まれていることを確認します。

mlterm 3.3.8 上での実行例:

$ stty -echo; echo -en '\e[c'; read -d c da1 <&1; stty echo; echo -E "${da1#*\?}"
1;2;4;7
  1. DA1 の問い合わせ
    • 「ESC + [c」を端末に出力する。
    • 上記例では応答が画面にエコーバックされないように stty -echo で抑制している。
  2. DA1 の取得
    • 端末から属性値を入力する。
    • 「ESC + [? + 属性値 [+ ; + 属性値 …] + c」という形式。

参考:

Sixel 文字列を出力して画像を描画する

$ echo -en '\ePq#0;2;0;0;0#1;2;100;100;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1!14@\e\\'
  1. Sixel 文字列の開始
    • 「ESC + Pq」を端末に出力する。
  2. 色番号に色を割り当てる
    • # + 色番号 + ;2; + 赤明度 + ; + 緑明度 + ; + 青明度」を端末に出力する。
    • 色番号は 0 〜 255 の範囲を指定する。
    • ;2; 部分は色を RGB (赤、緑、青) で指定することを示す。
    • 各色の明度は 0100 の値 (%) を指定する。
  3. ビットマップデータ (Sixel) の描画色の指定
    • # + 色番号」を端末に出力する。
    • 項番 2 で割り当てた色番号を指定する。
  4. ビットマップデータ (Sixel) の出力
    • ?」から「~」の範囲の ASCII 文字 (ASCII コード 0x3F 〜 0x7E) を端末に出力する。
    • 文字の ASCII コードから 0x3F 引いた値の 6 ビットが縦 6ピクセル分のビットマップデータとして描画される。
    • 最下位ビットが一番上のピクセルになる。
  5. ビットマップデータ (Sixel) の繰り返し描画
    • ! + 繰り返し回数」を端末に出力する。
    • 続くビットマップデータ文字 (項番 4) が指定した回数繰り返し描画される。
  6. 描画位置の復帰
    • $」を端末に出力する。
    • 描画位置が現在の行の左端に移動する。
  7. 描画位置の改行
    • -」を端末に出力する。
    • 描画位置が次の行の左端に移動する。
  8. 項番 3 〜 7 を繰り返す。
  9. Sixel 文字列の終了
    • 「ESC + \」を端末に出力する。

mlterm 上での Sixel 描画例: