1

我想使用库发送pygame.surface.Surface到另一台计算机。socket我尝试使用pygame.image.tostring但它占用了 900kb,但是当我使用pygame.image.save并使用jpg格式时,它只占用了 45kb。但问题是pygame.image.save将它输出到一个文件并且pygame.image.load只接受文件,它会减慢我的程序,因为我需要字节对象并且每秒读取和写入文件 32 次会杀死 cpu。我该怎么做才能将 a 转换pygame.surface.Surface为 abytesjpg格式却不每秒读取和写入文件 32 次?
(它不需要是 jpg 格式,但我希望它占用尽可能少的字节)

4

1 回答 1

1

另一种选择是使用zlib压缩字符串:

import zlib
image_str = pygame.image.tostring(my_image)
compressed_image_str = zlib.compress(image_str)

或者将图像保存到一个io.BytesIO对象pygame.image.save()

import io
temp_io = io.BytesIO()
pygame.image.save(my_surface, temp_io, "JPEG")

另一种选择是使用PLIImageio.BytesIO,这使您可以更灵活地选择格式:

from PIL import Image
import io
pil_string_image = pygame.image.tostring(my_surface, "RGB", False)
pli_image = Image.frombytes('RGB', my_surface.get_size(), pil_string_image, 'raw')
temp_io = io.BytesIO()
pli_image.save(temp_io, format="JPEG")
于 2020-12-22T08:42:56.920 回答