python - Python 中的枕头不允许我打开图像 ("exceeds limit")

标签 python image dataset

只是在用 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.

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

最佳答案

尝试

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

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

关于python - Python 中的枕头不允许我打开图像 ("exceeds limit"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51152059/

相关文章:

python - 使用 Google Calendar API v3 手动验证我的用户帐户

python - wxPython 中可点击图像网格的有效方法?

javascript - Canvas 线性缩小

c# - DataTable.Compute 不工作

ios - Swift:从两个数组转换为数据集以在图表中使用

python - 在 Python 中使用带有 contourf 的 clabel 的扭曲图

python - 名称错误 : name 'UTC' is not defined

python - 如何在python中删除路径前缀?

html - 跨浏览器后通过css插入图像

javascript - 将此数据集中的值从字符串转换为 int 的最佳方法是什么