前提・実現したいこと
画像処理をするfastapiを作成中です
pythonでmatplotlibで作成したfigureを保存することなくbase64に変換したいです。
最初はBytesIOを使った仮保存を行おうとしましたが、デプロイ後エラーが発生し変更しました。
発生している問題・エラーメッセージ
'FigureCanvasTkAgg' object has no attribute 'renderer'
該当のソースコード
python
1from typing import Optional 2import json 3from fastapi import FastAPI 4from pydantic import BaseModel 5import requests 6from io import BytesIO 7import base64 8import numpy as np 9import cv2 10import binascii 11import matplotlib 12matplotlib.use('TKAgg') 13import matplotlib.pyplot as plt 14def heartmake(a,b,c,kekka,hosi): 15 # 省略しますがハート曲線のようなグラフがfigure型で返されます、 16 #type(fig)=<class 'matplotlib.figure.Figure'> 17 return fig 18 19figure = heartmake(1,0,0,kekka,1) 20im = np.array(figure.canvas.renderer._renderer)#ここでエラーが発生します。 21# ndarray -> binary 22ret, data = cv2.imencode(".jpg", im, [cv2.IMWRITE_JPEG_QUALITY, 90]) 23# binary -> base64 ascii 24base64_ascii = binascii.b2a_base64(data).decode('ascii') 25#response.append({'kekka':kekka,'heart': base64_data})
試したこと
im = np.array(figure.canvas.renderer._renderer)を
im = np.array(figure.canvas.renderer.buffer_rgba())変更しましたが同様の結果がでました。
Renderer problems using Matplotlib from within a scriptこちらのサイトからimport matplotlib
matplotlib.use('TKAgg')を入れてみましたがダメでした。
google colabだとうまくいくので、何か環境設定の問題だと思います。
figureからbase64へ保存することなく変換できればやり方は問わないです。
補足情報(FW/ツールのバージョンなど)
windowsを使用
python 3.6.6
matplotlib3.3.0
vscodeを使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。