Включение поддержки JPEG для QImage в Py2-скомпилированных скриптах Python? - PullRequest
10 голосов
/ 20 мая 2009

Я пытаюсь использовать изображение JPEG в объекте QImage из скрипта Python с PyQt4.

Сам скрипт отлично работает, изображение загружается и его можно манипулировать и визуализировать и все. Однако, когда я пытаюсь «скомпилировать» этот скрипт с py2exe, все работает, кроме изображения JPEG. Замена на PNG-эквивалент работает, но поскольку моя программа загружает изображения из Интернета, они не всегда будут в формате PNG, и я не могу позволить себе преобразовать их все с другой библиотекой.

Я обнаружил, что поддержка изображений JPEG для QImage, наряду с другими форматами изображений, обеспечивается некоторыми библиотеками DLL в каталоге \ qt \ plugins \ imageformats (они называются qjpeg4.dll и qjpeg4d.dll). Я думаю, что мне нужно как-то использовать их в моем исполняемом файле, но я не знаю как. Я попытался просто скопировать их в мой каталог exe, не повезло. Я попытался, как указано здесь , включить эти файлы как data_files в скрипт setup.py, но безуспешно (похоже, все, что он делает, это копирует эти файлы в каталог exe, поэтому он меняется все равно ничего не копировать вручную).

Я уверен, что есть несколько приложений, использующих PyQt с изображениями JPEG, как они это делают? Это казалось тривиальной задачей, но я застрял на ней сейчас.

Кроме того, я хочу, чтобы мое приложение было кроссплатформенным (зачем еще я буду кодировать на Python?), Я надеюсь, что у меня не возникнет такой проблемы с упаковкой (она не единственная) при упаковке для OS X или Linux. Буду ли я?

Ответы [ 12 ]

0 голосов
/ 02 июня 2009

У меня была точно такая же проблема. Исправлено с помощью этого: http://mail.python.org/pipermail/python-list/2008-June/669374.html

  1. Скопируйте подключаемые модули Qt в каталог: $ YOUR_DIST_PATH / PyQt4 / plugins;
  2. Скопируйте qt.conf в каталог dist;
  3. Отредактируйте qt.conf, измените Префикс на ./PyQt4
0 голосов
/ 28 мая 2009

Попробовав все вышеперечисленные решения напрасно, я просто использовал PIL для загрузки своих изображений. Так как я хотел преобразовать эти изображения в текстуру в виджете OpenGL Qt, результат был одинаковым, загружаю ли я изображение с помощью Qt или PIL. Тем не менее, я озадачен тем, что такая базовая вещь, как загрузка JPEG, настолько сложна в библиотеке графического интерфейса, насколько хорошо известна и широко используется как Qt.

...