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



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

QImageIOHandler:拒绝超过当前分配的图像128兆的限制

在这里查看Qt6文档:QImageReader::setAllocationLimit((

和这里:QImageReader::allocationLimit((

文档建议使用setAllocationLimit来更改这个128兆字节的限制。

我的问题是这些属性似乎没有出现在Python版本(PyQt6(中。以下是PyQt6和QImageReader类的文档,并且不存在setAllocationLimit和AllocationLimited:QImageReader。

我有什么东西不见了吗?我觉得如果我能在PyQt6中访问setAllocationLimit,它就能解决我的问题,但我在任何地方都找不到它。

如果您使用PySide6,您可以禁用如下限制:

QtGui.QImageReader.setAllocationLimit(0)

并且不需要其他任何东西。

然而,对于PyQt-6.3.1和更早的版本,这个API目前还没有封装,这显然是一个bug。同时,解决方法是设置环境变量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版本中看到上述错误得到修复,请在邮件列表中报告。维护人员通常非常主动,所以应该很快修复(假设这是一个相对简单的添加(。

更新

由于OP没有按照上面的建议采取行动,我发布了添加API的请求。

PS:allocationLimit()和CCD_ 3在PyQt-6.4.1中添加。

对于pyside6,所提出的解决方案不起作用。在pyside6文档中,我发现";QtGui.QImageReader.setAllocationLimit(0(";它解决了我的问题

我写道:

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

在那之后,错误消失了,我可以在qlabel 中插入一个大图像

最新更新