Flask: How to use BytesIO in Flask to display matplotlib image without saving in file.
Przykład pokazuje jak
- użyć BytesIO
do stworzenie w pamięci obiekt pseudo-pliku
- zapisać w tym obiekcie obrazu z matplotlib
w formacie png
- pobrać dane z tego obiektu
- zamienić te dane na text zakodowany base64
- stworzyć w HTML tag obrazka z osadzonym obrazkiem w base64
from flask import Flask
#from flask import render_template
import matplotlib.pyplot as plt
import io
import base64
app = Flask(__name__)
@app.route('/plot')
def build_plot():
img = io.BytesIO()
y = [1,2,3,4,5]
x = [0,2,1,3,4]
plt.plot(x,y)
plt.savefig(img, format='png')
img.seek(0)
plot_url = base64.b64encode(img.getvalue()).decode()
return '<img src="data:image/png;base64,{}">'.format(plot_url)
if __name__ == '__main__':
app.run(debug=True)
Można także zapisać obrazek matplotlib
jako jpg
i wtedy będzie potrzebny jpeg
w src="data:image/jpeg;base64,{}"
.
W podobny sposób można w HTML osadzać inne pliki.