比PyGame更快的大图像显示?

8 投票
3 回答
2117 浏览
提问于 2025-04-16 19:27

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

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

有没有其他的库或者方法可以提高性能?我的目标平台是Windows 7和OS X,针对每个平台有不同的解决方案也没问题(不过如果能有一个通用的解决方案就更好了)。

3 个回答

0

你可能会发现使用像TkInter或GTK+这样的图形用户界面库比用PyGame更好。如果你需要用游戏库的话,PyGlet可能会适合你。关于PyGame,有人提到这样可以加速它:comments.gmane.org/gmane.comp.python.pygame/9015。你也可以看看libjpeg-turbo,评论中提到的地址是libjpeg-turbo.virtualgl.org。不过,就像我说的,使用图形用户界面库或者把整个项目移植到C/C++可能会更好,这样可以避免多语言调用的问题。祝你好运!

1

你可以试试 PyTurboJPEG,这是一个用Python写的工具,它可以让你更快地处理大JPEG图片,特别是在缩放(比如缩小到原来的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预编译版本也可以在 这里 下载。

3

如果你的jpeg库支持的话,你可以设置缩放参数。其实,如果你只是想在屏幕上显示图片,可能根本不需要输出一个6000x4000像素的超大图片,这样做可以让处理速度快好几倍。

http://jpegclub.org/djpeg/

撰写回答