PySide und jpeg

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
PyW
User
Beiträge: 2
Registriert: Mittwoch 21. Januar 2015, 12:02

Hallo

Ich habe ein Plugin für ein Programm (3ds max) geschrieben. Die Python Datei wird dabei direkt im Programm aufgerufen und ausgeführt.
Das Programm hat dafür eine eigene Python und PySide Version. Diese unterstützt jedoch keine jpeg Bilder.

Ich habe etwas gegoogelt und habe gelesen, dass zum lesen von jpeg-Dateien die qjpeg.dll benötigt wird, die jedoch bei Python in 3ds max nicht mitgeliefert wird.
Mein erster Ansatz war diese von meiner Python zu importieren. Leider funktioniert das anscheinend nicht so einfach, wie ich mir das vorgestellt habe.
Kann mir jemand bei dem Problem helfen?
Vielen Dank!

Hier ein Code mit dem ich den Import getestet habe:

Code: Alles auswählen

from PySide.QtGui import *
from PySide.QtCore import *
import sys
 
app = QApplication.instance()  #3ds Max 
app.addLibraryPath("C:/Python/Lib/site-packages/PyQt4/plugins/imageformats")
 
for i in QCoreApplication.libraryPaths():
 print (i)
for j in QImageReader.supportedImageFormats():
 print (j)
und der Output:
C:/Python/Lib/site-packages/PyQt4/plugins/imageformats
C:/Programs/Graphics/Autodesk/3ds Max 2015
bmp
pbm
pgm
png
ppm
xbm
xpm
#success
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Wenn Du in einer Python-Installation Python-Module verwenden willst, die mit C++ entwickelt und kompiliert wurden, dann gibt es da ein paar Dinge zu beachten:

Die Python Version von 3ds-max und Deiner lokalen Installation müssen exakt übereinstimmen (major=3 reicht nicht):

Code: Alles auswählen

import sys
print( sys.version_info )
Die PySide Version dieser beide Python-Installationen müssen übereinstimmen. Ich weiß nicht wie man diese Version mit PySide abfragt, aber mit PyQt geht's so:

Code: Alles auswählen

from PyQt4.QtCore import QT_VERSION_STR, PYQT_VERSION_STR
print(   QT_VERSION_STR )
print( PYQT_VERSION_STR )
Es könnte sein, dass qjpeg.dll noch Abhängigkeiten zu anderen dlls hat und 3ds-max diese nicht oder in einer anderen Version geladen hat. Diese Abhängigkeiten kannst Du mit dem Visual-Studio Hilfsprogramm Dependency-Walker herausfinden.

Als Workaround könntest Du die jpg Dateien nach bmp konvertieren, da bmp unkomprimiert ist, geht das ohne Qualitätsverlust.
a fool with a tool is still a fool, www.magben.de, YouTube
PyW
User
Beiträge: 2
Registriert: Mittwoch 21. Januar 2015, 12:02

Danke für die Antwort MagBen.

Wie es scheint muss ich wohl auf die neue Version des Programmes warten und hoffen, dass sie jpegs unterstützen (Python wird erst seit der neusten Version von 3ds max unterstützt).
In der Zwischenzeit werde ich die Bilder nach png konvertieren.

Sollte es jemand in Zukunft benötigen, hier noch die Abfrage zur PySide Version:

Code: Alles auswählen

import PySide

print (PySide.__version__)
print (PySide.QtCore.__version__)
Antworten