本文最后更新于:2025年4月14日 晚上

当使用PIL处理超过默认安全限制的大尺寸图像时,会触发DecompressionBombWarning警告。这个限制是为防止DOS攻击设定的,默认最大像素数为89478485,本文记录解决方案。

问题复现

Python 加载大尺寸图像时报错:

1
Image size exceeds limit of 89478485 pixels, could be decompression bomb DOS attack.

错误原因

这个错误是由 PIL(Python Imaging Library)库抛出的,意思是图像(或者说图片)大小超过了默认的安全限制。这个限制被称为“解压缩炸弹”限制,是为了防止恶意用户利用图像文件来进行拒绝服务(DOS)攻击而设置的。

在 PIL 中,默认情况下,对于单个图像,最大允许像素数量为 89478485 像素(即大约 30,000 x 30,000 像素),如果一个图像的总像素数量超过这个限制,就会抛出 DecompressionBombWarning 异常。

解决方案

如果确定要操作这个超出限制的图像,可以考虑通过设置 Image.MAX_IMAGE_PIXELS 来禁用该限制。例如:

1
2
3
4
5
6
from PIL import Image

Image.MAX_IMAGE_PIXELS = None # 禁用解压缩炸弹限制

# 然后可以正常加载和操作大尺寸图像
image = Image.open('large_image.tif')

禁用此限制也可能导致应用程序崩溃或消耗大量内存。因此,建议在必要时才禁用此限制,并尽可能控制图像大小。

参考资料



文章链接:
https://www.zywvvd.com/notes/coding/python/python-image-max-size/python-image-max-size/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

Image size exceeds limit of 89478485 pixels 解决方案
https://www.zywvvd.com/notes/coding/python/python-image-max-size/python-image-max-size/
作者
Yiwei Zhang
发布于
2025年4月8日
许可协议