Быстрее, чем PyGame для отображения больших изображений? - PullRequest
8 голосов
/ 13 июня 2011

Я использую PyGame для отображения изображений (фотографий). Для изображений большего размера процесс загрузки и преобразования выполняется медленно (например, для изображения размером 6000x4485 требуется 2-3 секунды). Фактический медленный код:

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

Есть ли альтернативная библиотека или метод, который даст лучшую производительность? Моими целевыми платформами являются windows7 и os x, и я в порядке с отдельными решениями для каждой (хотя одно решение было бы лучше).

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011

Если ваша библиотека jpeg поддерживает это, вы можете установить параметры масштабирования.Вам, вероятно, не нужно выходное изображение 6kx4k, если вы показываете его на экране, и оно может ускоряться в несколько раз.

http://jpegclub.org/djpeg/

0 голосов
/ 13 января 2018

Вы можете попробовать PyTurboJPEG , который является оболочкой Python libjpeg-turbo с безумно быстрым масштабированием (1/2, 1/4, 1/8) при декодированииБольшое изображение JPEG, подобное следующему,

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')

готовые двоичные файлы libjpeg-turbo для macOS и Windows 7 также доступны здесь .

0 голосов
/ 22 апреля 2013

Возможно, вам повезет больше, если вы используете библиотеку GUI, такую ​​как TkInter или GTK + поверх PyGame.Если вам нужно использовать игровую библиотеку, вам может понравиться PyGlet.Что касается PyGame, кто-то сказал, что это ускоряет его: comments.gmane.org/gmane.comp.python.pygame/9015.Вы также можете проверить libjpeg-turbo, как указано в комментариях на libjpeg-turbo.virtualgl.org.Но, как я уже сказал, вам лучше использовать библиотеку GUI или перенести все это на C / C ++, чтобы избежать многоязычных вызовов.Удачи!

...