我剛開始使用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