Flask发送和接收图片

文章介绍了如何在Flask应用中使用Python发送和接收图片,包括使用`requests.post`配合文件流、OpenCV的`imencode`以及PIL库处理图片上传和接收的方法。
摘要由CSDN通过智能技术生成

 前言

当使用flask框架的时候,去发送和接收图片,但是官方的是只有一个save方法,只能保存到本地在读取,那我岂不是还得再读出来,这多麻烦

解决

Post发送图片

方式一
info={}
with open("1.jpg","rb") as f:
    files={"file":("1.jpg",f,"image/jpg")}
    res=requests.post("http://127.0.0.1:10086/photo",data=info,files=files)
f.close()
方式二
image=cv2.imread("1.jpg")
info={}
files={"file":("1.jpg",cv2.imencode(".jpg",image)[1].tobytes(),"image/jpg")}
res=requests.post("http://127.0.0.1:10086/photo",data=info,files=files,timeout=3)

Flask接收图片

方式一
buf=request.files["file"].read()
img=cv2.imdecode(np.frombuffer(buf, dtype=np.uint8),flags=cv2.IMREAD_COLOR)

cv2.imshow("a",img)
cv2.waitKey(0)
方式二
from PIL import Image

imgbytes=request.files["file"]
image = Image.open(imgbytes)
image_cv2 = np.array(image)[:,:,::-1]
cv2.imwrite("a.jpg",image_cv2)
方式三
image=request.files["file"]
image.save("test.jpg")

下面是一个简单的 Flask 应用,可以用于发送接收二进制流图片: ```python from flask import Flask, request, jsonify, send_file import base64 from io import BytesIO app = Flask(__name__) # 发送二进制流图片 @app.route('/send_image', methods=['POST']) def send_image(): # 获取图片数据 img_data = request.files['image'].read() # 将图片数据转换为 base64 编码 b64_data = base64.b64encode(img_data).decode('utf-8') # 返回 JSON 数据 return jsonify({'image': b64_data}) # 接收二进制流图片 @app.route('/receive_image', methods=['POST']) def receive_image(): # 获取 JSON 数据 data = request.get_json() # 将 base64 编码的图片数据转换为二进制流 img_data = base64.b64decode(data['image']) # 将图片数据保存到 BytesIO 对象中 img_io = BytesIO(img_data) # 返回图片数据 return send_file(img_io, mimetype='image/jpeg') if __name__ == '__main__': app.run() ``` 在这个例子中,我们定义了两个路由:`/send_image` 和 `/receive_image`。`/send_image` 负责发送二进制流图片,`/receive_image` 负责接收二进制流图片。 在 `/send_image` 路由中,我们首先获取上传的图片数据,然后将图片数据转换为 base64 编码,并将编码后的数据返回为 JSON 格式。在 `/receive_image` 路由中,我们首先获取 JSON 数据,然后将 base64 编码的图片数据转换为二进制流,并将二进制流数据保存到 BytesIO 对象中。最后,我们使用 Flask 的 `send_file` 函数将图片数据返回给客户端。 需要注意的是,这个例子中使用了 base64 编码来传输图片数据。如果需要传输大量的图片数据,可能会导致传输效率低下。在实际应用中,可以考虑使用其他的传输方式,例如 HTTP Chunked Encoding 或者 WebSocket。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值