Python中的枕头不会让我打开图像(“超过限制”)

Posted

技术标签:

【中文标题】Python中的枕头不会让我打开图像(“超过限制”)【英文标题】:Pillow in Python won't let me open image ("exceeds limit") 【发布时间】:2018-12-11 14:51:49 【问题描述】:

只是在 Python 中对一些天气数据进行模拟时遇到了一些问题。数据以 .tif 格式提供,因此我使用以下代码尝试打开图像以将数据提取到 numpy 数组中。

from PIL import Image

im = Image.open('jan.tif')

但是当我运行这段代码时,我得到了以下错误:

PIL.Image.DecompressionBombError: Image size (933120000 pixels) exceeds limit of 178956970 pixels, could be decompression bomb DOS attack.

看起来这只是针对此类攻击的某种保护,但我实际上需要这些数据,而且它来自信誉良好的来源。有什么办法可以解决这个问题还是我必须寻找另一种方法来做到这一点?

【问题讨论】:

【参考方案1】:

在导入之后,添加:

Image.MAX_IMAGE_PIXELS = None

【讨论】:

哥们,你太棒了【参考方案2】:

试试

PIL.Image.MAX_IMAGE_PIXELS = 933120000

这样的事情怎么查?

import PIL
print(PIL.__file__)  # prints, e. g., /usr/lib/python3/dist-packages/PIL/__init__.py

然后

cd /usr/lib/python3/dist-packages/PIL
grep -r -A 2 'exceeds limit' .

打印

./Image.py:            "Image size (%d pixels) exceeds limit of %d pixels, "
./Image.py-            "could be decompression bomb DOS attack." %
./Image.py-            (pixels, MAX_IMAGE_PIXELS),

然后

grep -r MAX_IMAGE_PIXELS .

打印

./Image.py:MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 / 4 / 3)
./Image.py:    if MAX_IMAGE_PIXELS is None:
./Image.py:    if pixels > MAX_IMAGE_PIXELS:
./Image.py:            (pixels, MAX_IMAGE_PIXELS),

然后

python3
import PIL.Image
PIL.Image.MAX_IMAGE_PIXELS = 933120000

无怨无悔地工作并解决您的问题。

【讨论】:

如果您 100% 信任您的输入,您还可以使用 PIL.Image.MAX_IMAGE_PIXELS = None 完全禁用检查

以上是关于Python中的枕头不会让我打开图像(“超过限制”)的主要内容,如果未能解决你的问题,请参考以下文章

枕头,添加和旋转图像中的文本

Python:在不依赖枕头库的情况下旋转图像?

如何在 discord.py 中将图像裁剪为带有枕头的圆形?

枕头调整图像大小 - 保持纵横比

如何使枕头文字不会离开屏幕

枕头图像功能不可调用