我想使用库发送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
为 abytes
但jpg
格式却不每秒读取和写入文件 32 次?
(它不需要是 jpg 格式,但我希望它占用尽可能少的字节)
问问题
194 次
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")
另一种选择是使用PLIImage
和io.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 回答