JSONで画像をやりとりする python <-> JavaScript (React)
TL;DR
matplotlibは非常に優れたPythonのPlot libraryであり、バックエンド側でpngやsvgを作成しフロントエンド側に送って表示させたい場合があります。そういう場合にどうすればいいのか、まとまっている情報があまりなかったのでメモ。
Python 3.7.4 Node v12.16.2
Python側
基本的にBytesIOを使ってBufferを読み込んで、その値をJSONにSerializeします。
とりあえずサンプルプロットを作成します。JSONを送信する方法はflaskなりdjangoなりを使ってください。
これについて、png/svgをJSONにシリアライズします。svgはそのままシリアライズできますが、pngについてはbase64 encodingが必要です。pngじゃなくてjpegとかでも同様です。
SVG to JSON
PNG to JSON
JavaScript (React)側
こっちは色々方法があると思いますが、JSX使うのが楽なのでReactを使います。JSONはfetchとかaxiosとかで持ってくるものとします。持ってきたデータをjson_dataとしておきます。
SVG rendering from JSON
innerHTMLとして埋め込むこともできますが、今回はreact-inlinesvgというパッケージを使ってしまいます。propsで受け渡されていることにしましょう。
PNG rendering from JSON
こちらはデフォルトで<img src={}>にblobから作成したURIを入れればいいです。
最後に
まとまった情報が見つからなかったのでメモがてら残しておきます。