使用FLASK开发API接受图片返回图片大小

目的

使用Flask实现一个服务,通过调用这个服务,向服务传递一个图片,得到图片大小的返回值。其实从本质上来说,无论是图片还是文字或者字符,都是数据,即最原始的一串0和1组成的二进制数据,API接收或者返回图片,本质上也就是接收或返回一段数据流。
环境:python
:Flask,Requests,pillow
服务器端:使用Flask库,接收从客户端传来的文件,计算图片的大小,以数据字典的形式返回图片格式和大小。
客户端:使用Requests库访问url资源。使用Requests的post方法,将图片以二进制的形式传递到服务器上,获得服务器的返回值。

使用Request上传文件:

使用Requests上传文件时,但是requests把要上传的文件简化成files参数,文件的读取必须要转换成二进制形式,这样才能获取准确的bytes文件长度。

 upload_files = {'file': open('report.xls', 'rb')}
 r = requests.post(url, files=upload_files)

在服务器端接受文件时

upload_file = request.files['file']

计算图片大小:

计算图片大小使用pillow库,pillow库是一个非常强大的图片处理器。

from PIL import Image
img = Image.open(图片地址)
print img.format        # PNG
print img.size          # (3500, 3500)

实现过程

服务器端:

# receive pic # accuate size #return size 
# import base64
from flask import request
from flask import Flask,jsonify,abort
from PIL import Image

 
app=Flask(__name__)


@app.route("/photo", methods=['POST'])
def get_frame():
    # 接收图片
    upload_file = request.files['file']
    # 获取图片名
    file_name = upload_file.filename
 
    if upload_file:
       
        #计算图片大小
        img = Image.open(upload_file)
        
        return {file_name:{'format':img.format,'size':img.size}}
    
    abort(400)  #若没有图片传递返回400


 
if __name__ == '__main__':
#     app.run(host='127.0.0.1',port=5000)
# 将host设置为0.0.0.0,则外网用户也可以访问到这个服务
    app.run(host="0.0.0.0", port=8383, debug=True)

客户端

#post pic get size
import requests

 
# API地址
url = "http://127.0.0.1:8383/photo"
# url = "http://0.0.0.0:5000/photo"
# 图片地址
file_path='test.jpg'
# 图片名
file_name=file_path.split('/')[-1]
# 二进制打开图片
file=open(file_path,'rb')
# 拼接参数
files = {'file':(file_name,file,'image/jpg')}
# 发送post请求到服务器端
r = requests.post(url,files = files)
print (r.json())


实现结果

使用FLASK开发API接受图片返回图片大小_第1张图片
使用FLASK开发API接受图片返回图片大小_第2张图片

你可能感兴趣的:(python,http)