Подушка в Python не позволит мне открыть изображение («превышает лимит») - PullRequest
0 голосов
/ 03 июля 2018

Просто возникли проблемы с запуском симуляции на некоторых погодных данных в 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 Ответ

0 голосов
/ 03 июля 2018

Попробуйте

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

Работает без жалоб и исправляет вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...