我正在更新一个从PyQt5到PyQt6的应用程序。应用程序使用非常大的图像文件。但是,我已经更新了使用PyQt6的代码,但是当我运行Python时,我现在得到了一个错误:
QImageIOHandler:当图像超过当前128兆字节的分配限制时拒绝它
看看这里的Qt6文档:QImageReader::setAllocationLimit()
...and这里:QImageReader::allocationLimit()
文档表明,可以使用setAllocationLimit来更改这个128 be的限制。
我的问题是,这些属性似乎没有出现在Python (PyQt6)中。下面是PyQt6和QImageReader类以及setAllocationLimit和AllocationLimit的文档:QImageReader。
我遗漏了什么吗?我觉得如果我能在PyQt6中访问PyQt6,它可以解决我的问题,但我哪儿也找不到它。
发布于 2022-03-13 18:53:38
如果使用的是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。
发布于 2022-06-03 12:41:15
对于pyside6,所提出的解决方案不起作用。在pyside6文档中,我发现"QtGui.QImageReader.setAllocationLimit(0)“解决了我的问题
我写道:
from PySide6 import QtGui
os.environ['QT_IMAGEIO_MAXALLOC'] = "10000000000000000000000000000000000000000000000000000000000000000"
QtGui.QImageReader.setAllocationLimit(0)在此之后,错误消失了,我能够将一个大的图像插入qlabel中。
https://stackoverflow.com/questions/71458968
复制相似问题