我刚开始使用PIL和Pygame,我想创建一个屏幕共享程序。 为了截取我使用ImageGrab.grab()的截图,现在我想将它发送到另一台计算机并在Pygame中打开它,而不将它保存在任何计算机上。 这是现在我的服务器:在不保存python的情况下发送图像
#region - - - - - - I M P O R T S - - - - - -
import socket
import select
from PIL import ImageGrab
import pickle
#endregion
#region - - - - - - C O N S T A N T S - - - - - -
PORT = 8253
CONCURRENT_USERS = 5
#endregion
#region - - - - - - M E T H O D S - - - - - -
def CaptureScreen():
img = ImageGrab.grab()
return img
#endregion
server_socket = socket.socket()
server_socket.bind(('', PORT))
server_socket.listen(CONCURRENT_USERS)
clients_list = []
while True:
read, write, error = select.select([server_socket] + clients_list, [], [], 0)
for i in read:
if i is server_socket:
client_socket, client_address = server_socket.accept()
clients_list.append(client_socket)
for i in clients_list:
img = CaptureScreen()
try:
i.send(pickle.dumps(img))
except socket.error:
clients_list.remove(i)
i.close()
我试图以发送图像用泡菜,但我响应了一个错误。 所以我正在寻找一种方法来发送我通过套接字使用ImageGrab捕获的图像,并在另一台计算机上用Pygame打开它,而不必将其保存在任何计算机上。 任何人都可以帮助我吗?我正在使用Python 2.6和Windows 7. 预先感谢您!
我得到一个“AttributeError的:tobytes”的错误,当我试图使用方法: img.tobytes() 上也是如此Image.frombytes (args) 也许我以错误的方式使用它们?你能给我一个正确使用的例子吗? – PyStudent51
参阅我编辑的答案。 –
此外,这将发送原始图像数据,这是_huge_ - 通过使用StringIO /(BytesIO)方法,您可以在发送图像之前将图像编码为.png或.jpg,并可节省大量(高达90%)带宽, – jsbueno