前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Flask搭建显示服务器图片的http服务

利用Flask搭建显示服务器图片的http服务

原创
作者头像
languageX
发布2021-12-02 13:38:38
2.2K0
发布2021-12-02 13:38:38
举报

最近实现了一个小需求:在本地PC端通过页面形式展示服务器端生成的一些结果图片。本文主要介绍如何利用flask搭建一个http服务。

前端页面和后台的数据传输在之前文章中有过介绍:https://cloud.tencent.com/developer/article/1781615

本文结合具体的例子介绍下服务的搭建已经图片的展示。

假设我们有服务器A生成数据,服务器B从服务器A下载数据并采用html页面展示图片, 本地机器C请求本地展示html页面内容。

服务器之间的图片传输

服务器A作为服务端提供数据,服务器B作为客户端请求数据下载:

服务端代码:

import os
import base64
from flask import Flask, jsonify, request
import numpy as np
import cv2
import json

# flask服务
app = Flask(__name__)
pic_path = "./p1.png"

def img2base64(pic_path):
    #将图片数据转成base64格式
    with open(pic_path, 'rb') as f:
        img = base64.b64encode(f.read()).decode()
        return img

@app.route('/show', methods=['POST'])
def show():
    if request.method == 'POST':
        values = request.get_json()
        img1 = img2base64(pic1_path)
        result = {"pic1": img1}
        return result


if __name__ == '__main__':
    _port = 8091
    debug = False
    use_reloader = False
    app.run(host='0.0.0.0', port=_port, debug=debug, use_reloader=use_reloader)

在服务端运行这个脚本,会启动一个ip:8091的服务~

客户端代码:

import os
import numpy as np
import time
import json
import requests
import base64
import cv2
import glob

def save_pic(pic1_base64, save_path):
    #解析图片数据
    img = base64.b64decode(pic1_base64)
    image_data = np.fromstring(img, np.uint8)
    image_data = cv2.imdecode(image_data, cv2.IMREAD_COLOR)
    cv2.imwrite(save_path, image_data)

def get_pics():
    headers = {'Content-Type': 'application/json'}
    resp = requests.post(url="http://IP:8091/show",      headers=headers,data=json.dumps({'input': "test"}))
    pred = resp.json()
    img1_base64 = str(pred["pic1"])
    save_path1 = "./html_imgs/pic1.png"
    save_pic(img1_base64, save_path1)

if __name__ == "__main__":
    get_pics()

运行脚本,服务器A传入的图片就可以获取并保存到本地html_imgs文件夹中。

图片的html展示以及http服务搭建

现在服务器B就做为服务端,需要将本地图片展示到html页面中,并且提供一个接口供客户端调用。

服务器代码:

from flask import Flask
from client_code  import get_pics
app = Flask(__name__,static_url_path="", static_folder="html_imgs")

@app.route('/')
def loadhtml():
    # 先获取机器上图片
    get_idc_pics()
    with open('html_imgs/test.html', 'r', encoding='utf-8') as r:
        html = r.read()
    return html

if __name__ == '__main__':
    app.run(host='服务器A的ip', port=5000)

其中html代码,用于展示图片:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<p>result1</p>
<img src="./pic1.png" alt="测试图片">
</body>
</html>

运行python脚本,就能启动一个IP:5000的用于展示从服务器A下载的图片的服务

本地请求

本地打开浏览器,输入http://服务器IP:5000/ 就可以看到我们的展示页面啦~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 服务器之间的图片传输
  • 图片的html展示以及http服务搭建
  • 本地请求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档