最近实现了一个小需求:在本地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文件夹中。
现在服务器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 删除。