通过套接字发送图像并显示它

时间:2016-11-26 11:33:20

标签: python python-2.7 sockets

我正在尝试将图像从服务器发送到客户端,然后让客户端使用show()显示它,但我遇到了一些问题。 这是发送图像的服务器代码:

        im = ImageGrab.grab()
        if not os.path.exists(r'C:\screens'):
            os.makedirs(r'C:\screens')
        im.save(r'C:\screens\screen.jpg')
        data = open(r'C:\screens\screen.jpg', 'r')
        data = data.read()
        client_socket.send(str(data))

现在,显然我无法通过套接字发送文件,所以我将其作为字符串发送,但是,我不知道如何在客户端中使用show(),因为你可以&# 39;在字符串上使用show(),我不知道如何解决这个问题。 你可以看到我几乎是python的初学者,所以如果解决方案简单明了,我很抱歉。 我很感激任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

您使用的是Python 2还是3? (编辑:python 2.7,在标签中,对不起)在任何情况下:图像文件几乎总是不是文本,所以不要这样对待它。

  • 这也意味着您必须将图像数据读取为二进制而不是文本模式,因此请使用data = open("image.jpg", "rb").read()
  • 在通过套接字发送之前不要转换为str,而是直接发送二进制文件(字节)。
  • 在接收端(您的客户端?)您recv来自套接字的字节。我想你可以使用Image.frombytes直接从它创建一个图像并显示出来。或者,将从套接字获得的字节写入新文件(确保使用“wb”二进制模式打开)和Image.open()该文件。