使用QPixmap加载图片

4

我有一个图片文件,路径为C:/44637landscapes-2007.jpg

我想使用PySide的QPixmap加载这个文件。

我尝试了以下代码:

pixmap = QPixmap('C:/44637landscapes-2007.jpg')

但是文档上写着QPixmap(':/xxxxxx.jpeg'),这里的':'是什么意思?

我该如何加载'C:\'下的图片?

编辑:问题出在试图加载"JPEG"格式的图片上。它可以无问题地加载"PNG"格式的图片。那么我还需要做什么来加载"JPEG"格式的图片呢?

谢谢 Jijoy

4个回答

5
Qt对图像处理有些奇怪的地方。如果你只使用png格式,你永远不会遇到问题。其他图像格式的处理方式略有不同。
在Qt目录下(包含所有二进制文件和源代码),你会找到一个名为“plugins\imageformats”的目录。
在该目录中有大量的dll文件(或.so文件),每个文件都支持Qt支持的一种图像格式。在你的情况下,我想你感兴趣的是qjpeg4.dll文件。
现在,当你运行应用程序并尝试使用jpeg格式时,Qt将尝试加载此插件,但如果它找不到它,则图像不会显示出来。
我们曾经遇到过ico文件的类似问题。在我们的开发环境中,它可以工作,因为Qt文件夹在我们的PATH中,因此它自动找到了这个插件。但是,当我们发布软件时,我们只会分发我们需要的那些dll文件,因此它无法工作。
经过多次调查,我们做了以下事情:
1.我们的应用程序位于bin/目录下。这是exe和所有Qt dll文件的位置。例如QtCore4.dll和QtGui4.dll等。
2.在bin目录下创建一个名为“imageformats”的子目录。
3.放置qjpeg4.dll和任何其他可能需要的图像插件。
4.更改代码如下:
QApplication _App(argc, argv);
//查找bin目录的路径-无论你的exe位于何处。 QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");
//这一行提供了一个路径给Qt,告诉它在这里寻找插件 QApplication::addLibraryPath(_Path);
//初始化主窗体 return _App.exec();
这应该确保Qt知道jpeg处理插件,并在UI中加载你的图像。

4

您可以通过提供文件的路径名来构造 QPixMap 的实例。当您尝试运行代码时,您遇到了什么错误?将您的代码更改为以下内容:

pixmap = QPixMap(r'C:\filename.jpeg')

您所提到的文档是指加载Qt资源的方式。可以将应用程序需要的图像转换为Qt资源,以便以平台无关的方式加载它。有关如何执行此操作的步骤,请参见Qt资源系统文档。

我没有收到任何错误信息。当我尝试使用 pixmap = QPixmap() pixmap.load('r^C:\abc.jpeg') 时,它返回了“false”。这意味着加载没有成功。 - Jijoy
如果您能够加载像素图,那么问题是什么? - sateesh
我无法加载图片。根据文档,如果返回“false”,我认为它不会加载图片。 - Jijoy
当您创建一个 pixmap 实例时,图像也会被加载(前提是文件存在且格式可读),否则您将得到一个空对象。 - sateesh
当我尝试加载PNG时,它可以正常工作。我认为如果要加载JPEG,则需要做一些额外的工作。 - Jijoy

3

如果您正在尝试将Python代码构建为可执行文件,则此处涵盖了.ico文件的问题,但JPEG的过程相同: PyQt/PySide - icon display

如果您在从已安装的解释器运行时遇到问题,则可能未正确设置路径变量,您的qt.conf(位于基本python目录中)已被删除/更改,或者您没有qjpeg4.dll在其应该在的位置(<python dir>\Lib\site-packages\PySide\plugins\imageformats)。

我的qt.conf如下:

[Paths]
Prefix = C:/Python27/lib/site-packages/PySide
Binaries = .
Plugins = plugins
Translation = translation

C:/Python27/lib/site-packages/PySide 是我的系统 PATH 变量的一部分,并且在任何 PyQt(或其他 Qt)目录之前。


没问题,顺便问一下,实际问题是什么?我在可能的解决方案列表中采取了一种试错的方法。 - Gerald
问题在于qt.conf路径不正确。它指向了错误的插件文件夹。 - Jijoy

0
你可以使用这个:
Pixmap=setPixmap(QtGui.QPixmap("path_image"))

2
不要简单地写上“试试这个”这样的非句子,而是阅读[答案]并[编辑]你的答案,以包含解释为什么这段代码实际上可以解决手头的问题。永远记住,你不仅仅是在解决问题,还在教育提问者和未来阅读此帖子的人。 - undefined
1
除了上述之外,使用诸如“谢谢”和“试试这个……”这样的短语会让帖子被误解,并被认为不是答案。 “谢谢”似乎是指别人提供的解决方案。“试试这个……”似乎是一个提议的实验,是为了更多地了解并可能通过新的见解得出答案,但本身并不是一个答案。 - undefined
根据目前的写法,你的回答不够清晰。请编辑以添加更多细节,帮助他人理解这如何回答所提出的问题。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

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