10 Stimmen

Aktivieren der JPEG-Unterstützung für QImage in py2exe-kompilierten Python-Skripten?

Ich versuche, ein JPEG-Bild in einem QImage-Objekt von einem Python-Skript, mit PyQt4 zu verwenden.

Das Skript selbst funktioniert einwandfrei, das Bild wird geladen, kann bearbeitet und gerendert werden und so weiter. Wenn ich jedoch versuche, dieses Skript mit py2exe zu "kompilieren", funktioniert alles außer dem JPEG-Bild. Wenn ich es durch ein PNG-Äquivalent ersetze, funktioniert es, aber da mein Programm Bilder aus dem Internet herunterlädt, werden sie nicht immer im PNG-Format sein und ich kann es mir nicht leisten, sie alle mit einer anderen Bibliothek zu konvertieren.

Ich habe entdeckt, dass JPEG-Bildunterstützung für QImage, zusammen mit anderen Bildformaten, von einigen DLLs in der \qt\plugins\imageformats Verzeichnis (sie heißen qjpeg4.dll und qjpeg4d.dll). Ich glaube, ich muss sie irgendwie in meiner ausführbaren Datei verwenden, aber ich weiß nicht, wie. Ich habe versucht, sie einfach in mein exe-Verzeichnis zu kopieren, ohne Erfolg. Ich habe versucht, als hier angegeben Ich habe versucht, diese Dateien als data_files in das setup.py-Skript einzubinden, aber ohne Erfolg (es sieht so aus, als ob es diese Dateien nur in das Verzeichnis der Exe kopiert, also ändert sich nichts gegenüber dem manuellen Kopieren der Dateien).

Ich bin sicher, es gibt eine Handvoll von Anwendungen da draußen mit PyQt mit JPEG-Bildern, wie tun sie es tun? Es schien wie eine triviale Aufgabe, aber ich bin auf es jetzt stecken.

Außerdem möchte ich, dass meine Anwendung plattformübergreifend ist (warum sollte ich sonst in Python programmieren?), und ich hoffe, dass ich bei der Paketierung für OS X oder Linux nicht auf solche Probleme stoße (es ist nicht das einzige). Werde ich das?

0voto

Etienne Perot Punkte 4464

Nachdem ich alle oben genannten Lösungen vergeblich ausprobiert hatte, habe ich schließlich PIL zum Laden meiner Bilder verwendet. Da ich diese Bilder in eine Textur in einem OpenGL-Qt-Widget konvertieren wollte, war das Ergebnis dasselbe, egal ob ich das Bild mit Qt oder PIL lud. Dennoch bin ich verblüfft, dass eine so einfache Sache wie das Laden von JPEGs in einer so bekannten und weit verbreiteten GUI-Bibliothek wie Qt so kompliziert ist.

0voto

Ich hatte genau das gleiche Problem. Ich habe es mit diesem behoben: http://mail.python.org/pipermail/python-list/2008-June/669374.html

  1. Kopieren Sie Qt-Plugins in das Verzeichnis: $YOUR_DIST_PATH/PyQt4/plugins;
  2. Kopieren Sie qt.conf in Ihr dist-Verzeichnis;
  3. qt.conf bearbeiten, Prefix in ./PyQt4 ändern

0voto

Unter Windows funktionieren die vorgeschlagenen Lösungen perfekt.

aber unter OSX kann ich es nicht zum Laufen bringen, auch nicht mit den Anweisungen hier oben.

Frage ist: die libqjpeg.dylib et libqgif.dylib Dateien befinden sich im Verzeichnis /Developer/Applications/Qt/plugins/imageformats/ Verzeichnis, und zwar wenn Sie Qt selbst installiert haben, nicht nur PyQt. Diese Dateien funktionieren bei mir nicht.

in der PyQt-Distribution sehe ich die Dateien libqjpeg.bundle et libqgif.bundle において /opt/local/libexec/qt4-mac/plugins/imageformats/ Dies sind jedoch keine Bibliotheken, und im Übrigen kann ich ihren Inhalt auch nicht öffnen, selbst wenn sie die Erweiterung .bundle haben.

Ich bin neugierig zu wissen, was haben Sie getan, um es auf osx arbeiten. Ich habe PyQt folgende installiert dieser Leitfaden .

0voto

Vinicius Berni Punkte 1

Bei mir wurde das Problem gelöst, indem ich die "qt.conf" in das Verzeichnis der ausführbaren Datei kopiert habe.

Sie finden die "qt.conf" in ... \PythonXX\Lib\site -pakete \PyQt4\qt.conf.

Danke für die Hilfe.

0voto

rdchambers Punkte 1376

Alles oben Genannte hat bei mir versagt, bis ich erkannte, dass ich Bündelung die .exe (das heißt, ich hatte die Option "bundle_files" : 2 in meiner setup.py. Ich änderte sie in bundle_files = 2, und jetzt funktioniert es wunderbar.

Die oben genannten Lösungen sind in Ordnung. Konkret habe ich gerade die folgende Zeile in meine setup.py eingefügt: data = [ ("imageformats", glob.glob(" C:\Python26\Lib\site -pakete \PyQt4\plugins\imageformats *.dll")) ]

(natürlich zusätzlich zu anderen Dateien).

Dann befinden sich die Bildlade-Dlls in MY_EXE_DIR/imageformats

Ich brauchte keine qt.conf, damit das funktioniert, obwohl ich sicher bin, dass Sie sie verwenden können, wenn Sie Ihren Verzeichnisbaum weniger unübersichtlich halten wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X