Python: PyQt QPixmap对于有效图像返回Null

3

我正在尝试使用PyQt的QPixmap这个 .tiff 图像加载到我的 GUI 界面中。我有以下代码:

fileName = QFileDialog.getOpenFileName(self.parent, "Open Image", "/", "Image Files (*.png *.jpg *.bmp *.tiff)");
img = QtGui.QPixmap(fileName)
scaled_img = img.scaled(self.ui.img_label.size(), QtCore.Qt.KeepAspectRatio)
self.ui.img_label.setPixmap(scaled_img)

在我的GUI中,img_label是一个Qlabel。我用各种.jpg.png.tiff图像进行了测试,它似乎可以工作,但是当我在这个图像上进行测试时,它返回了Null

我尝试了什么

  • 我尝试打印QImageReader.supportedImageFormats,它显示.tiff被支持
  • 也尝试检查图像的MIME类型,显示为image/tiff

有人能建议我可能做错了什么吗?


1
请注意,“TIFF”是一种复杂且非常灵活的文件容器格式,因此大多数可以“处理TIFF”的库实际上无法处理所有合法的TIFF文件。例如,某些库无法进行FAX压缩、CMYK颜色、24bpp RGB、平铺文件等操作... - abarnert
下载并检查了这个文件后,它似乎非常普通——一个带有 LZW (#5) 压缩的单个图像,96dpi,RGB 8bpp,没有色彩配置文件,小端 32 位偏移量……因此我不确定通常的“数千种不兼容的文件格式”问题是否是原因。 - abarnert
@abarnert 这很奇怪,因为这篇帖子似乎有一个与.jpg图像类似的问题.. - motatoes
当我在64位Mac OS X 10.8上使用Homebrew安装的Qt 4.8.4和5.0.1尝试此操作时,它们都可以轻松地显示图像并按任意大小缩放。那么你使用的是哪个平台和Qt的哪个版本呢? - abarnert
我使用32位Windows,在Python 2.7中使用WinPython - motatoes
显示剩余3条评论
2个回答

4

好的,这有点奇怪。当我改变这行时图像就加载了:

img = QtGui.QPixmap(fileName)

致:

img = QtGui.QPixmap(fileName, "1")

事实上,当我指定任何数字字符串作为第二个参数时,它似乎能够正常工作。我不确定第二个参数是否应该如文档所述那样,有点模糊。希望有人能解释发生了什么,因为这真的令我感到困惑。


第二个参数应该是有效的图像格式之一,这些值在以下链接中列出 - http://pyqt.sourceforge.net/Docs/PyQt4/qpixmap.html#reading-and-writing-image-files - Vikas Ojha

1

QFileDialog.getOpenFileName()返回一个元组。 尝试使用以下方法代替:

fileName = QFileDialog.getOpenFileName(self.parent, "Open Image", "/", "Image Files (*.png *.jpg *.bmp *.tiff)");
img = QtGui.QPixmap(fileName[0])
scaled_img = img.scaled(self.ui.img_label.size(), QtCore.Qt.KeepAspectRatio)
self.ui.img_label.setPixmap(scaled_img)

它对于PySide返回一个元组,但对于PyQt返回一个字符串。那不是我的问题,抱歉。 - motatoes

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