使用PIL和StringIO发送图像

时间:2015-05-26 19:49:21

标签: python sockets pygame python-imaging-library stringio

我刚刚开始使用PIL,StringIO和Pygame,因此我在获取想要的结果时遇到了一些麻烦。 我尝试制作一个屏幕共享软件,为了实现这一点,我需要能够将图像从一台计算机发送到另一台计算机并使用Pygame在那里显示。 这是服务器:

#region - - - - - - I M P O R T S - - - - - -
import socket
import select
from PIL import ImageGrab
from PIL import Image
from cStringIO import StringIO
import base64
#endregion
#region - - - - - - C O N S T A N T S - - - - - -
PORT = 8820
CONCURRENT_USERS = 5
#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 = ImageGrab.grab()
            img_str = StringIO()
            img.save(img_str, "JPEG")
            try:
                i.send(base64.b64encode(img_str.getvalue()))
            except socket.error:
                clients_list.remove(i)
                i.close()

还有客户:

import socket
import pygame
import sys
from PIL import Image
from StringIO import StringIO
import base64
IP = '127.0.0.1'
PORT = 8820
client_socket = socket.socket()
client_socket.connect((IP, PORT))
WIDTH = 720
HEIGHT = 480
pygame.init()
size = WIDTH, HEIGHT
screen = pygame.display.set_mode(size)
count = 0
while True:
    count += 1
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            sys.exit()
    str_img = ''
    chunk = client_socket.recv(1024)
    while chunk:
        str_img += chunk
        chunk = client_socket.recv(1024)
    str_img = base64.b64decode(str_img)
    img = Image.open(str_img)
    screen.blit(img, (0, 0))
    screen.display.flip()

Pygame窗口没有显示任何图像,几秒钟后它也会崩溃。 我在使用StringIO之前尝试了几种方法(我尝试过使用Pickle和一些Image方法)但没有任何方法可以帮助我。 谁能发现这个问题?非常感谢你提前!

0 个答案:

没有答案