我正在将应用程序从 PyQt5 更新到 PyQt6。该应用程序使用非常大的图像文件。我已经更新了代码以使用 PyQt6,但是,当我运行 Python 脚本时,我现在收到错误:
QImageIOHandler:拒绝图像,因为它超出了当前分配
限制为 128 兆字节
在这里查看 Qt6 文档:QImageReader::setAllocationLimit()
...和这里:QImageReader::allocationLimit()
文档建议 setAllocationLimit 可用于更改此 128 MB 限制。
我的问题是这些属性似乎没有出现在 Python 版本(PyQt6)中。这是 PyQt6 和 QImageReader 类的文档,并且 setAllocationLimit 和 AllocationLimit 不存在:QImageReader.
我有什么遗漏的吗?我觉得如果我可以在 PyQt6 中访问 setAllocationLimit 它会解决我的问题,但我在任何地方都找不到它。
如果您使用 PySide6,您可以像这样禁用该限制:
QtGui.QImageReader.setAllocationLimit(0)
不需要其他任何东西。
然而,对于 PyQt-6.3.1 及更早版本,此 API 目前尚未包装,这显然是一个错误。同时,解决方法是设置环境变量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 版本中看到上述错误得到修复,请在邮件列表。维护者通常非常积极主动,因此应该很快修复它(假设它是一个相对简单的添加)。
UPDATE:
由于OP没有按照上述建议采取行动,我发布了一个请求添加 API。
PS: allocationLimit()
and setAllocationLimit()
在 PyQt-6.4.1 中添加。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)