【PIL读取报错处理】PIL.Image.DecompressionBombError:由于图像尺寸过大,超出了 Pillow 库的默认限制,从而引发了潜在的安全风险提示
·
【PIL读取报错处理】PIL.Image.DecompressionBombError:由于图像尺寸过大,超出了 Pillow 库的默认限制,从而引发了潜在的安全风险提示
【PIL读取报错处理】PIL.Image.DecompressionBombError:由于图像尺寸过大,超出了 Pillow 库的默认限制,从而引发了潜在的安全风险提示
文章目录
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文,可关注VX“
学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181864
PIL.Image.DecompressionBombError 错误是由于图像尺寸过大,超出了 Pillow 库的默认限制,从而引发了潜在的安全风险提示。此错误的完整信息是:
Image size (401815416 pixels) exceeds limit of 178956970 pixels, could be decompression bomb DOS attack.
解释
- Decompression Bomb:这是图像处理中的一种安全防护机制,目的是防止恶意用户利用特定的图像格式通过过度压缩图像,制造出解压后非常大的图像,从而造成内存溢出(DoS
攻击,拒绝服务攻击)。这种情况称为“解压炸弹”。 - Image size:这是指图像的像素总数。例如,图像的尺寸是 10,000 x 10,000 像素,那么图像的像素总数就是
100,000,000(即 1 亿像素)。 - Limit:Pillow 默认限制了图像的最大像素数(在你的情况中为 178,956,970 像素)。当图像的像素数超出该限制时,Pillow 会抛出 DecompressionBombError 错误。
解决办法
增加 Pillow 的图像尺寸限制
如果你确定图像不是恶意的,并且希望继续处理该图像,可以增加 Pillow 的默认限制。你可以通过设置 Image.MAX_IMAGE_PIXELS 来更改图像尺寸限制。
from PIL import Image
# 设置较大的限制值
Image.MAX_IMAGE_PIXELS = None # 或者设置为一个较大的值,例如 10亿
这样,Pillow 就不会因为图像尺寸过大而抛出 DecompressionBombError 错误了。注意,这个操作可能会导致内存使用量剧增,尤其是对于非常大的图像。
检查图像的尺寸
在读取图像之前,可以先检查图像的尺寸,确保它在合理范围内,避免加载过大的图像。
with Image.open(img_path) as img:
print(f"Image size: {img.size}") # 输出图像尺寸
if img.size[0] * img.size[1] > 178956970:
print("The image is too large!")
使用其他方法读取和处理大图像:
- 如果你的图像非常大,可以考虑使用
rasterio等专门处理大规模地理数据的库,它允许按需读取和处理遥感图像,避免一次性加载整个图像到内存中。 - 你还可以尝试将图像裁剪成较小的块来逐步处理。
示例代码
from PIL import Image
# 设置较大的限制值
Image.MAX_IMAGE_PIXELS = 500000000 # 设置更大的限制
# 读取图像
img_path = r'E:\gaoxiao\glacier\冰川提取影像及标签\gansuRGB_8bit.tif'
img = Image.open(img_path)
print(f'Image size: {img.size}')
如果图像尺寸超出限制,Pillow 会自动抛出 DecompressionBombError 错误,你可以根据需要决定是增加限制还是采用其他处理方法。
更多推荐

所有评论(0)