はじめに
Sixelは、通常は文字しか表示できない「黒い画面」(=ターミナル=端末)で画像を表示するAnsi エスケープシーケンスの一種です。1982年(DEC社のLA50に搭載)から存在します。Microsoftは長年無関心でしたが、今回実装となりました。
以下はニュースのネタ元です。
Sixelの説明(他力本願)
まずは以下リンクを御参考。Wikipediaは英語版なので要翻訳
自分なりのSixelの理解
「Sixel」の造語の由来は、6個のピクセル(six pixel)から来ています。
ASCIIコード (http://www3.nit.ac.jp/~tamura/ex2/ascii.html) に基づいた以下の計64文字を使って、縦6ピクセル×横1ピクセルを表現します。
- 大文字のアルファベット(26文字)
- 小文字のアルファベット(26文字)
- 記号(12文字)
1 2 3 4 5 6
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
1 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
2 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
3 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
4 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
5 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
6 █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █ █
数字や「#」「;」「$」「-」等の記号は、色や改行や位置の定義を示している。
ちなみに、なぜ縦が8ピクセルではなく、6ピクセルかというと、2の6乗(=2⁶)が64だからです。
縦が8ピクセルならば何かと扱い易いですが、2の8乗(=2⁸)は256となり、256文字を必要となりますが、ASCIIコードの128文字までしかないので、縦は6ピクセルになったのでしょう。
本題のGo言語のプログラム
package main
import (
"fmt"
)
func main() {
fmt.Println("テスト01_\033Pq#1;2;100;100;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1@@@@@@@@@@@@@@\033\\")
fmt.Println("テスト02_\033Pq#1;2;100;0;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1@@@@@@@@@@@@@@\033\\")
fmt.Println("テスト03_Pq#1;2;0;0;100#2;2;50;50;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1@@@@@@@@@@@@@@\\")
fmt.Println("テスト04_\033Pq#1;2;100;100;100#2;2;100;100;0#1?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\033\\")
}
実行結果
もはや暗号だが、イメージは以下となる。
始 第1色 R G B第2色R G B 1色目 2色目 1色目 終
\033Pq#1;2;100;100;0#2;2;0;100;0#1~~@@vv@@~~@@~~$#2??}}GG}}??}}??-#1@@@@@@@@@@@@@@\033\\
#1██████████████$#2 -#1██████████████
#1██ ██ ██ ██$#2 ██ ██ ██ -#1
#1██ ██ ██ ██$#2 ██ ██ ██ -#1
#1██ ██ ██$#2 ██████ ██ -#1
#1██ ██ ██ ██$#2 ██ ██ ██ -#1
#1██ ██ ██ ██$#2 ██ ██ ██ -#1
気づいたこと
今回Sixel作成してみて気づいたがSixel画像の右側には文字が書けない。
ドット絵おまけ
package main
import (
"fmt"
)
func main() {
fmt.Println("ドット絵1_\033Pq#1;2;100;0;0#2;2;42;24;15#3;2;100;61;0#1??ABBBBBAAAA?$#2?wc[S??ko__?$#3??W_g{{OKWWWO-#1???omwwko???$#2GK]M?EEAK[KG$#3oo_@P@@P@`oo-#1??BBB@@BBB??$#2GKKK????KKKG$#3@@????????@@\033\\")
fmt.Println("ドット絵2_\033Pq#1;2;0;100;0#2;2;42;24;15#3;2;100;61;0#1????EBRBBRBE???$#2????wKkKKkKw???$#3??{o?o?oo?o?o{?-#1???AA??gGW[MA??$#2wkCk{{GQq___CN[$#3?OwP@BvDDFBPxo_-#1???????AABBB@??$#2BBABJJK@@CCC???$#3?CDCCCB??????@\033\\")
}