with tutorial the espaƱol applications python image sockets pygame python-imaging-library

python - tutorial - the django project



Enviar una imagen en python sin guardarla (1)

Empecé a trabajar con PIL y Pygame y quería crear un programa de pantalla compartida. Para tomar una captura de pantalla utilicé ImageGrab.grab () y ahora quiero enviarlo a otra computadora y abrirlo en Pygame sin guardarlo en ninguna de las computadoras. Este es mi servidor ahora mismo:

#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()

Intenté usar Pickle para enviar las imágenes pero recibí un error en respuesta. Así que estoy buscando una forma de enviar una imagen que he capturado usando ImageGrab a través de sockets y abrirla con Pygame en otra computadora sin guardarla en ninguna de las computadoras. ¿Alguien puede ayudarme? Estoy usando Python 2.6 y Windows 7. ¡Gracias de antemano!


Puede obtener los datos de la imagen sin Image.tobytes() con Image.tobytes() y reconstruirlos a partir de datos sin Image.frombytes() con Image.frombytes() , cf http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image .Image.tobytes y http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.fromstring

Pickle es un protocolo FWIW notoriamente inseguro, por lo que es mejor quedarse con los datos sin procesar.

Tenga en cuenta que estas son características de la versión 2.x de la horquilla Pillow de PIL. Si está utilizando la biblioteca PIL original y no puede actualizar a Pillow, deberá usar los Image.tostring() e Image.fromstring() , o usar las funciones save() y load() con un StringIO como objeto de archivo, como (aproximadamente) documentado aquí . Como mencionó jsbueno, esta última solución podría ahorrar bastante ancho de banda ...