PyQt6:如何在 QImageReader 中设置分配限制?

PyQt6: How to set allocation limit in QImageReader?

我正在将应用程序从 PyQt5 更新到 PyQt6。该应用程序使用非常大的图像文件。我已经更新了代码以使用 PyQt6,但是,当我 运行 Python 脚本时,我现在收到一个错误:

QImageIOHandler: Rejecting image as it exceeds the current allocation limit of 128 megabytes

在此处查看 Qt6 文档:QImageReader::setAllocationLimit()

...这里:QImageReader::allocationLimit()

文档建议可以使用 setAllocationLimit 来更改此 128 兆字节限制。

我的问题是这些属性似乎没有出现在 Python 版本 (PyQt6) 中。这是 PyQt6 和 QImageReader class 的文档,setAllocationLimit 和 AllocationLimit 不存在:QImageReader.

有什么我想念的吗?我觉得如果我可以在 PyQt6 中访问 setAllocationLimit 它会解决我的问题,但我无法在任何地方找到它。

此 API 当前未包装在 PyQt6 中,这显然是一个错误。同时,一个work-around是设置环境变量QT_IMAGEIO_MAXALLOC:

>>> path = 'path/to/large-image.jpg'
>>> os.path.getsize(path) // 1024 // 1024
9
>>> r = QtGui.QImageReader(path)
>>> os.environ['QT_IMAGEIO_MAXALLOC'] = "1"
>>> r.read()
qt.gui.imageio: QImageIOHandler: Rejecting image as it exceeds the current allocation limit of 1 megabytes
>>> os.environ['QT_IMAGEIO_MAXALLOC'] = "10"
>>> r.read()
<PyQt6.QtGui.QImage object at 0x7f1d51857d10>

如果您想在下一个 PyQt6 版本中看到上述错误,请在 mailing list 上报告。维护者通常非常pro-active,所以应该很快修复它(假设它是一个相对简单的添加)。

对于 pyside6,建议的解决方案无效。 在 pyside6 文档中我发现“QtGui.QImageReader.setAllocationLimit(0)”解决了我的问题

我写道:

from PySide6 import QtGui
os.environ['QT_IMAGEIO_MAXALLOC'] = "10000000000000000000000000000000000000000000000000000000000000000"
QtGui.QImageReader.setAllocationLimit(0)

在那之后,错误消失了,我能够将大图像插入 qlabel