python 生成的图像直接作为图像流返还给前端(flask方法实现)


原文链接: python 生成的图像直接作为图像流返还给前端(flask方法实现)

python 生成的图像直接作为图像流返还给前端(flask方法实现)


from PIL import Image
from flask import Flask
import PIL
import matplotlib.pyplot as plt
import numpy as np
import io

app = Flask(__name__)

# 定义路由
@app.route("/")
def index():
    # 数据准备
    x = np.arange(10)
    y = x

    # plt.plot(x,y)
    # canvas = plt.get_current_fig_manager().canvas
    # canvas.draw()
    fig = plt.figure()
    plt.plot(x, y)
    canvas = fig.canvas
    # 上面这段代码和上面注释掉的代码效果一样

    # 方法1
    buffer = io.BytesIO()
    canvas.print_png(buffer)
    data = buffer.getvalue()
    buffer.close()

    # 方法2
    # buf, size = canvas.print_to_buffer()
    # image = Image.frombuffer('RGBA', size, buf, 'raw', 'RGBA', 0, 1)
    # buffer = io.BytesIO()
    # image.save(buffer, 'PNG')
    # data = buffer.getvalue()
    # buffer.close()

    # 向前端返回图像
    res = app.make_response(data)
    res.headers["Content-Type"] = "image/png"
    return res


if __name__ == "__main__":
    app.run()
————————————————
版权声明:本文为CSDN博主「天伦ltl」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42799459/article/details/99736105

场景需求:需要在Flask服务器的本地找一张图片返回给前端展示出来。

问题疑点:通常前端的标签只会接受url的形式来展示图片,没试过在返回服务器本地的一张图片给前端。

因此写个记录一下这个看起来有点奇葩的场景(通常个人博客,个人网站没有钱用第三方的服务都会采用存储在服务器本地的方法啦。)

项目目录:

dyy_project

|

|----static (新建flask项目时自动建的,没有任何文件)

|----templates

|-----index.html   (前端页面)

|----dyy_project.py   (flask项目启动文件)

文件内容:dyy_project.py

#!/usr/bin/env python

coding=utf-8

from flask import Flask
from flask import render_template

app = Flask(name)

"""
这是一个展示Flask如何读取服务器本地图片, 并返回图片流给前端显示的例子
"""

def return_img_stream(img_local_path):

"""
工具函数:
获取本地图片流
:param img_local_path:文件单张图片的本地绝对路径
:return: 图片流
"""
import base64
img_stream = ''
with open(img_local_path, 'r') as img_f:
    img_stream = img_f.read()
    img_stream = base64.b64encode(img_stream)
return img_stream

@app.route('/')
def hello_world():

img_path = '/home/hogan/Googlelogo.png'
img_stream = return_img_stream(img_path)
return render_template('index.html',
                       img_stream=img_stream)

if name == 'main':

app.run(debug=True, port=8080)

文件内容:index.html

<!DOCTYPE html>

<meta charset="UTF-8">
<title>Flask Show Image</title>


<img style="width:180px" src="data:;base64,{{ img_stream }}">


注意:在img标签中的src一定要按照 data:;base64,{{img_stream}} 的形式添加,否则显示不出图片。

然后启动你的Flask程序,访问http://127.0.0.1:8080 你就可以看到你的图片了。
————————————————
版权声明:本文为CSDN博主「DHogan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dongyouyuan/article/details/72282906

`