Python如何将socket接收的图像字节流直接转换为图像展示无需保存
Python Socket接收图像字节流直接展示实现
初始实现(先存本地再读取)
最初的实现逻辑是将接收到的图像字节流写入本地磁盘保存,代码如下:
from socket import * import cv2 port = 9999 s = socket(AF_INET, SOCK_STREAM) s.bind(('', port)) s.listen(1) conn, addr = s.accept() print("Connected by the ",addr) with open('/home/Desktop/frame/my_image.png', 'wb') as file: while True: data = conn.recv(1024*8) if not data: break file.write(data) conn.close()
核心需求
无需从保存目录读取图像,直接将收到的字节数据转换为图像并展示,省略先存盘再读取的环节。
可正常运行的最终实现代码
from socket import * import datetime import cv2 import PIL.Image as Image from PIL import ImageFile, Image import io import base64 import numpy as np import pickle date_string = datetime.datetime.now().strftime("%Y-%m-%d-%H:%M") port = 9999 s = socket(AF_INET, SOCK_STREAM) s.bind(('', port)) s.listen(1) conn, addr = s.accept() img_dir = '/home/Desktop/frames_saved/' img_format = '.png' b=bytearray() print("Connected by the ",addr) with open(img_dir+date_string+img_format, 'wb') as file: while True: data = conn.recv(1024*1024*1) if not data: break file.write(data) b += data conn.close() ImageFile.LOAD_TRUNCATED_IMAGES = True image = Image.open(io.BytesIO(b)) image.show()
如果不需要保留本地图像备份,可直接删除代码中写文件的相关逻辑,仅保留字节流拼接b += data的部分即可。
内容的提问来源于stack exchange,提问作者user11597888
相关产品推荐
相关产品推荐

