【问题标题】:Faster than PyGame for large image display?比 PyGame 更快地显示大图像?
【发布时间】:2018-01-13 20:45:08
【问题描述】:

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

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

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

【问题讨论】:

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

标签: python image image-processing pygame


【解决方案1】:

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

http://jpegclub.org/djpeg/

【讨论】:

    【解决方案2】:

    您可以尝试PyTurboJPEG,它是libjpeg-turbo 的 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 预构建二进制文件也可用here

    【讨论】:

      【解决方案3】:

      使用 TkInter 或 GTK+ 等 GUI 库而不是 PyGame 可能会更好。如果你需要使用游戏库,你可能会喜欢 PyGlet。对于 PyGame,有人说这可以加快速度:cmets.gmane.org/gmane.comp.python.pygame/9015。您还可以按照 libjpeg-turbo.virtualgl.org 的 cmets 中的说明检查 libjpeg-turbo。但是,就像我说的,您最好使用 GUI 库或将整个东西移植到 C/C++ 以避免多语言调用。祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-02
        • 2019-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-23
        • 2011-04-03
        • 1970-01-01
        相关资源
        最近更新 更多