有没有一种方法可以将STRING OF BYTES转换为字节?

时间:2019-10-02 11:58:51

标签: python-3.x sockets byte python-imaging-library

我正在尝试通过套接字(以块为单位)将图像从“服务器”发送到“客户端”,但在客户端看不到该图像。

我正在使用枕头模块(特别是ImageGrab)。我正在抓取屏幕截图并将其另存为“ .png”文件,这样我便拥有了该文件所需的所有数据(所有这些都发生在服务器端)。

(我已经尝试将捕获的图像对象转换为字节而不将其保存到文件中,并且丢失了某些数据,例如'\ xPNG'统计信息,我想还有更多,我对照片的了解并不强文件)。

保存后,我用文件指针打开它,读取数据并通过套接字发送。

另一方面,我得到了一串字节(看起来像字节数据的字符串),并且我的计算机由于某种原因不知道如何读取。

一些常数:

MES_LEN_SPACE = 20
CHUNKS_LEN = 1024
END_CODE = "$$$$$"

服务器端:

这是我获取图像数据的方式:

im = ImageGrab.grab()
im.save("tempServer.png")
im.close()
with open("tempServer.png", "rb") as f:
    msg = f.read()
send_data_by_protocol_in_chunks(msg, client_socket)

这是“ send_data_by_protocol_in_chunks()”函数:

def send_data_by_protocol_in_chunks(data, client_socket):
    num_of_chunks = len(data) // CHUNKS_LEN
    for i in range(num_of_chunks + 1):
        send_data_by_protocol(data[i * CHUNKS_LEN: (i + 1) * CHUNKS_LEN], client_socket)
    send_data_by_protocol(END_CODE, client_socket)

这是“ send_data_by_protocol()”函数:

def send_data_by_protocol(msg, client_socket):
    msg_length = len(str(msg))
    message_by_protocol = f"{msg_length:<{MES_LEN_SPACE}}{msg}".encode('utf-8')
    client_socket.send(message_by_protocol)

在客户端:

main()

img_bytes = get_image(my_socket)
print(len(img_bytes))
with open("ImageData.txt", "w") as f:
    f.write(img_bytes)

“ get_image()”函数:

def get_image(my_socket):
    img = ''
    temp = get_data(my_socket, True)
    while END_CODE not in temp:
        img += temp
        temp = get_data(my_socket, True)
    return img

“ get_data()”函数:

def get_data(my_socket, is_image=False):
    data_len = my_socket.recv(MES_LEN_SPACE).decode('utf-8')  # to receive data we will use the recv method, which gets number of bytes
    data_len = int(data_len)
    data = my_socket.recv(data_len).decode('utf-8')
    if END_CODE not in data:
        return data[2:-1] if is_image else data
    else:
        return END_CODE

我要在那里剪切数据(data [2:-1]),因为我得到了一串字节,这意味着我可以得到类似的东西:

"b\'\\x.......\\x##\'"

,我想删除最后的“ b \'”和“ \'”。


我的计算机说无法读取我在客户端保存的图像。 我应该怎么做才能使计算机读取文件? 我希望得到一些帮助。

0 个答案:

没有答案