gpt4 book ai didi

python - 在 Python 3 中通过套接字发送图像

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:31 27 4
gpt4 key购买 nike

我正在尝试通过套接字从客户端向服务器发送图像(屏幕截图)。在 Python 2 中,我能够使用 read()write() 函数来读取和写入二进制数据以及 StringIO .但它们都在 Python 3 中消失了。我正在玩 PIL,但我无法让测试程序运行。

客户

image = ImageGrab.grab()
s.send(image.tobytes())

我使用 GrabImage 创建了一个屏幕截图并将其保存为 image。之后,我通过套接字将图像作为二进制文件发送到服务器。

服务器

data = conn.recv(4194304)
img = Image.frombytes('RGB', (1366, 768), data)
img.save('screenshot.jpg')

但是,如果我运行脚本,我会收到一条错误消息:
ValueError:图像数据不足

我想我错过了一些决定性的东西,但我想不通。
谢谢你,chrizator。

最佳答案

很可能在检索到所有数据之前返回对 .recv() 的调用;该参数是最大尺寸,而不是精确尺寸。您需要在循环中调用 .recv() 并附加数据,直到接收到整个图像。这意味着您需要一些方法来知道何时收到全部数据 - 常见的策略是:

  • 继续阅读,直到您看到某个特定的终止字符或字符序列。不直接适用于这种情况,因为原始图像数据可能意外地包含任何特定的字节序列。
  • 在数据之前发送长度(可能是带终止符的十进制数,或固定大小的二进制值);继续阅读,直到您收到那么多字节。
  • 发送数据后关闭套接字;继续阅读,直到获得零字节结果。

关于python - 在 Python 3 中通过套接字发送图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45577317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com