Python 比PyGame更快的大图像显示?

Python 比PyGame更快的大图像显示?,python,image,image-processing,pygame,Python,Image,Image Processing,Pygame,我正在使用PyGame显示图像(照片)。对于较大的图像大小,加载和转换过程较慢(例如,对于大小为6000x4485的图像,需要2-3秒)。实际缓慢的代码是: image = pg.image.load(fname).convert() 是否有其他库或方法可以提供更好的性能?我的目标平台是windows7和os x,我可以为每种平台提供单独的解决方案(尽管单个解决方案更好)。如果您的jpeg库支持,您可以设置缩放参数。如果在屏幕上显示6kx4k输出图像,则可能不需要它,而且它的速度可以提高几倍

我正在使用PyGame显示图像(照片)。对于较大的图像大小,加载和转换过程较慢(例如,对于大小为6000x4485的图像,需要2-3秒)。实际缓慢的代码是:

image = pg.image.load(fname).convert()

是否有其他库或方法可以提供更好的性能?我的目标平台是windows7和os x,我可以为每种平台提供单独的解决方案(尽管单个解决方案更好)。

如果您的jpeg库支持,您可以设置缩放参数。如果在屏幕上显示6kx4k输出图像,则可能不需要它,而且它的速度可以提高几倍


使用TkInter或GTK+over PyGame之类的GUI库可能会更幸运。如果您需要使用游戏库,您可能会喜欢PyGlet。对于PyGame,有人说这会加快速度:comments.gmane.org/gmane.comp.python.PyGame/9015。您还可以按照libjpeg-turbo.virtualgl.org上的评论中的说明检查libjpeg-turbo。但是,正如我所说,您最好使用GUI库,或者将整个过程移植到C/C++以避免多语言调用。祝你好运

您可以试一试,在解码大型JPEG图像时,它是一个Python包装器,具有惊人的快速缩放(1/2、1/4、1/8),如下所示:

import pygame
from turbojpeg import TurboJPEG

# specifying library path explicitly
# jpeg = TurboJPEG(r'D:\turbojpeg.dll')
# jpeg = TurboJPEG('/usr/lib64/libturbojpeg.so')
# jpeg = TurboJPEG('/usr/local/lib/libturbojpeg.dylib')

# using default library installation
jpeg = TurboJPEG()

# direct rescaling 1/2 while decoding input.jpg to RGBA pixel array
pixel_array = jpeg.decode(
    open('input.jpg', 'rb').read(), 
    pixel_format=TJPF_RGBA, 
    scaling_factor=(1, 2))
height, width, _ = pixel_array.shape
image = pygame.image.frombuffer(pixel_array.data, (width, height), 'RGBA')

还提供了适用于macOS和Windows 7的libjpeg-turbo预构建二进制文件。

我认为您无法获得更好的性能。可能需要花费大部分时间的是加载和解码图像。这就是C代码(jpeglib)。请记住,解压后的图像大小为77MB。根据应用程序的不同,你可以通过在后台或其他地方预加载来“作弊”。我确信picasa和内置的windows viewer都能更快地显示相同的图像。我看看能不能计时,检查一下。他们特别提到了libjpeg-turbo,它是libjpeg的替代品。libjpeg-turbo看起来非常有前途(尽管编译起来有点麻烦)。在7560x5600 jpg文件上计时执行djpeg时,我比标准的libjpeg提高了3倍。如果您的应用程序不要求以全分辨率显示图像(即,您没有在图像的一小部分上缩放全屏),那么2700万像素可能是多余的。您可以将图像预处理为更小的(1K x 1K的大小)一次(脱机或在后台任务中),然后在应用程序中加载更小的版本。