PyQt4不支持jpeg/jpg图片格式

7
我正在尝试让QImage(或PyQt4中的任何东西)在脚本中加载jpg文件。我没有找到任何有关如何将其作为脚本加载jpg图像的信息,大部分是使用py2exe编译,但我甚至无法达到那一步。
花费了一些时间来解决这个问题,我已经按照一些方法但均无用。在我的site-packages/PyQt4/plugins/imageformats文件夹中查看,我有:
qgif4.dll, qico4.dll,qjpeg4.dll, qmng4.dll, qsvg4.dll, qtga4.dll, qtiff4.dll

根据QtGui.QImageReader.supportedImageFormats(),这是我安装的pyqt4可以使用的格式。
[PyQt4.QtCore.QByteArray('bmp'), PyQt4.QtCore.QByteArray('pbm'), PyQt4.QtCore.QByteArray('pgm'), PyQt4.QtCore.QByteArray('png'), PyQt4.QtCore.QByteArray('ppm'), PyQt4.QtCore.QByteArray('xbm'), PyQt4.QtCore.QByteArray('xpm')]

我已确保我的qt.conf文件位于主Python目录中,并包含以下内容:
[Paths]
Prefix = C:/Python27/Lib/site-packages/PyQt4
Binaries = C:/Python27/Lib/site-packages/PyQt4

我尝试添加了 <\p>
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins/imageformats
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins

运行Python 2.7.2,使用PyQt4 4.9.1(均为32位),在Windows 7 64位家庭高级版上运行。

我已经尝试了版本4.8.1和4.8.5(手头有的版本),但它们都不支持jpg。我很无助。如何使它们重新被支持?

with no luck

(没有成功)

很奇怪。对我来说,在使用py2app打包时,这曾经是一个问题,但在脚本情况下从未出现过。它总是能够正确地找到插件。 - jdi
哇,这不仅仅是JPEG。似乎PyQt无法加载任何那些dll文件。你能试试Plugins = plugins吗?它不应该是完整路径。 - Avaris
我尝试了插件,然后试了'/plugins','/plugins/imageformats','plugins/imageformats'以确保。但是没有任何反应。 - ooklah
你尝试过彻底清除你的Python和PyQt安装并重新安装吗?假设这对大多数人都有效,所以除非你在代码中做了一些奇怪的事情,否则可能是你的安装出了问题。 - Cryptite
我从官网下载了最新的Python 2.7.3 MSI和PyQt4 4.9.1 exe安装程序,并将它们安装到一个尚未安装这些程序的新机器上。然而,新机器也无法加载额外的图像格式。 - ooklah
2个回答

8

似乎有两个不同的问题可能会导致这种情况发生。而且看起来我遇到了这两个问题。

1. 我以“管理员”身份运行PyQt4安装程序,这似乎解决了部分问题。因此,需要以管理员身份运行才能使所有内容正常工作。

2. 为了正确加载所有插件,在加载任何类型的图像之前必须首先创建QApplication。

所以

app = QtGui.QApplication(sys.argv)

需要先创建

我的脚本运行为
def main():
    app = QtGui.QApplication(sys.argv)
    win = window()
    win.display()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

自从我以管理员身份安装PyQt4以来,它的原始状态没有改变,但现在它可以工作并加载JPEGS和其他所有内容。
我尝试做的是创建一个脚本,这个脚本将由PyQt4应用程序调用,但它不会自己运行,因此没有必要先创建一个QApplcation。这就是我遇到问题#2的地方。
请参考:http://article.gmane.org/gmane.comp.python.pyqt-pykde/7176/match=jpeg+plugin+not+loading 以管理员身份安装并始终创建QApplication,即使您不需要它。
如果您只是想检查idle中可用的内容:
from PyQt4 import QtGui
QtGui.QImageReader.supportedImageFormats()

不会显示所有内容,仍需要运行

from PyQt4 import QtGui
import sys
app = QtGui.QApplication(sys.argv)
QtGui.QImageReader.supportedImageFormats()

这个问题确实让人苦恼,希望这篇文章对其他人有所帮助。


1
所以,在Windows上使用virtualenvs时遇到了这个问题(将PyQt4从全局site-packages复制到envs site-packages)- 我不得不像原始帖子中指定的那样在Scripts\python.exe旁边创建qt.conf文件 - 然后一切都像应该一样工作了! - Strayer
如果有人知道如何在不创建 QApplication 的情况下加载插件,请在此处添加评论;对于我们只是使用 QImage 作为实用程序图像加载类的人来说,这将非常有帮助。 - GaryO
我的程序在把QApplication调用放到__main__之前是无法工作的。如果像你展示的那样在main()中使用QApplication,它就不能正常工作。非常奇怪,但是消除了对main()的使用后,问题得到了解决。 - panofish

0

如果有人正在寻找加载插件的方法,我已经在这里为一个更合适的问题创建了答案,让你可以将插件放置在任何网络共享文件夹中。

简而言之,使用QtCore.QCoreApplication.addLibraryPath()代替qt.conf文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接