Pillow在python中不会让我打开图像

Tom*_*ley 13 python image dataset

在python中对某些天气数据运行模拟时遇到一些问题.数据以.tif格式提供,因此我曾经按照代码尝试打开图像以将数据提取到numpy数组中.

from PIL import Image

im = Image.open('jan.tif')
Run Code Online (Sandbox Code Playgroud)

虽然当我运行此代码时,我收到以下错误:

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

看起来这只是对这种类型的攻击的某种保护,但我实际上需要数据,它来自一个有信誉的来源.有没有办法解决这个问题,还是我必须寻找另一种方法来做到这一点?

小智 32

导入后,添加:

Image.MAX_IMAGE_PIXELS = None
Run Code Online (Sandbox Code Playgroud)

  • 哥们你真棒 (2认同)

Alf*_*lfe 22

尝试

PIL.Image.MAX_IMAGE_PIXELS = 933120000
Run Code Online (Sandbox Code Playgroud)

怎么找出这样的东西?

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

然后

cd /usr/lib/python3/dist-packages/PIL
grep -r -A 2 'exceeds limit' .
Run Code Online (Sandbox Code Playgroud)

版画

./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),
Run Code Online (Sandbox Code Playgroud)

然后

grep -r MAX_IMAGE_PIXELS .
Run Code Online (Sandbox Code Playgroud)

版画

./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),
Run Code Online (Sandbox Code Playgroud)

然后

python3
import PIL.Image
PIL.Image.MAX_IMAGE_PIXELS = 933120000
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您100%信任您的输入,也可以使用`PIL.Image.MAX_IMAGE_PIXELS = None'完全禁用检查。 (10认同)