やること
libsixelにPython interfaceがあったので使ってみます。
インストール
省略。
やりかた
byte列からSixelデータに変換すれば良いのですが、それやろうとするとCのAPI使わなければならなそうだったので、実行時効率を捨てて手軽に実現します。
from libsixel.encoder import Encoder as SixelEncoder
from libsixel import SIXEL_OPTFLAG_WIDTH, SIXEL_OPTFLAG_HEIGHT
from tempfile import NamedTemporaryFile
def sixeldraw(width=None,height=None):
with NamedTemporaryFile(prefix="sixel-") as fd:
pl.savefig(fd,format="png")
fd.flush()
encoder = SixelEncoder()
if width : encoder.setopt(SIXEL_OPTFLAG_WIDTH, width)
if height: encoder.setopt(SIXEL_OPTFLAG_HEIGHT,height)
encoder.encode(fd.name)
if __name__=="__main__":
import matplotlib
matplotlib.use("Agg")
import pylab as pl
import numpy as np
x = np.linspace(0,1)
y = x**2
pl.plot(x,y)
sixeldraw(640)
はい。一時的にファイル作ってグラフ画像を保存します。その画像ファイルをlibsixelのpython interfaceを使ってSixel形式で標準出力に出します。Sixel対応のターミナルを使ってれば画像がでます。
手抜き実装です。