使用 QPixmap 加载图像

Posted

技术标签:

【中文标题】使用 QPixmap 加载图像【英文标题】:Loading an image using QPixmap 【发布时间】:2011-05-10 16:36:07 【问题描述】:

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

我想使用 PySide 使用 QPixmap 加载此文件

我尝试如下。

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

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

如何在'C:\' 加载图片?

编辑:问题在于尝试加载 "JPEG" 。它能够加载 "PNG" ,没有任何问题。那么还有什么,我需要做些什么来加载"JPEG"

谢谢 极乐

【问题讨论】:

【参考方案1】:

Qt 对图像做了一些奇怪的事情。如果您只使用 pngs,您将永远不会遇到问题。其他图像格式的处理方式略有不同。

如果您查看您的 Qt 目录(所有二进制文件和源代码都在其中),您会发现一个名为:plugins\imageformats

在该目录中,Qt 支持的每种图像格式都有大量的dlls(或.so)。在您的情况下,我认为您感兴趣的是qjpeg4.dll

现在,当您运行应用程序并尝试使用jpeg 时,Qt 将尝试加载此插件,但如果找不到,则您的图像将不会显示。

我们对 ico 文件也有类似的问题。它在我们的开发环境中工作,因为 Qt 文件夹在我们的PATH, 中,因此它神奇地找到了这个插件。但是,当我们发布我们的软件时,我们只会分发我们需要的那些 dll,因此它不起作用。

经过大量调查,这就是我们所做的:

我们的应用程序位于 bin/ 目录中。这是放置 exe 和所有 Qt dll 的地方。 QtCore4.dllQtGui4.dll 等...

在 bin 目录下,我们创建一个名为'imageformats'的子目录

qjpeg4.dll 和您可能需要的任何其他图像插件放入。

修改代码如下:

QApplication _App(argc, argv);

// Find the path of your bin directory - whereever your exe resides.

QString _Path = _PathToBin + QString(QDir::separator()) + "imageformats");

// This line is providing a path to Qt telling it to look here for plugins QApplication::addLibraryPath(_Path);

// Initialize the main form

return _App.exec();

这应该确保 Qt 知道 jpeg 处理插件,并在 UI 中加载您的图像。

【讨论】:

【参考方案2】:

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

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

您所指的文档是您加载 Qt 资源的方式。可以将应用程序需要的图像转换为 Qt 资源,以便以独立于平台的方式加载它。有关执行此操作的步骤,请参阅The Qt Resource System 文档。

【讨论】:

我没有收到任何错误。当,我尝试像 pixmap = QPixmap() pixmap.load('r^C:\abc.jpeg') 。它返回 'false' 。这意味着加载不起作用。 如果您能够加载像素图,那么问题是什么? 我无法加载图像。根据文档,如果它返回 "false" ,我认为它不会加载图像。 ' 当你创建一个像素图实例时,图像也会被加载(前提是文件存在并且格式可读),否则你会得到一个空对象。 当我尝试加载 PNG 时,它起作用了。我认为要加载 JPEG,需要做一些额外的事情。【参考方案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)目录的ahead

【讨论】:

没问题,出于好奇,真正的问题是什么?在可能的解决方案列表中,我采取了一些霰弹枪的方法。 问题是 qt.conf 路径不正确。它指向错误的插件文件夹。

以上是关于使用 QPixmap 加载图像的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5组件之QPixmap

QPixmap 在 Qt 中加载许多图像

Python Qt GUI设计:QPainterQPenQBrush和QPixmap窗口绘图类(基础篇—17)

Python Qt GUI设计:QPainterQPenQBrush和QPixmap窗口绘图类(基础篇—17)

将 NSImage 加载到 QPixmap 或 QImage 中

如何在Python 3中将QImage(QPixmap)转换为PIL图像?