2014-09-06 3 views
7

Я фотограф-фотограф, который много разбирается с обрезкой/изменением размера изображения. Поскольку я снимаю фильм, мне приходится сканировать мои негативы и обрезать каждый кадр из пакетного сканирования. Мой сканер сканирует четыре полосы по шесть изображений каждый (24 кадра/урожая на сканирование).Инструмент для обрезки изображения (Python)

Мой друг написал мне сценарий для Python, который автоматически посещает изображения на основе введенных координат. Скрипт работает хорошо, но он имеет проблемы в формате файла экспортированных изображений.

Из сканирования каждый кадр должен отображать 37 МБ TIFF при 240 DPI (когда я обрезаю и экспортирую в Adobe Lightroom). Вместо этого Cropper выводит TIFF размером 13 МБ 72 DPI.

Терминал (я нахожусь на Mac) предупреждает меня о «декомпрессионной бомбе» всякий раз, когда я запускаю Cropper. Мой друг в тупике и предложил мне спросить переполнение стека.

У меня нет опыта Python. Я могу предоставить код, который он написал, и команды, которые дает мне Terminal.

Мысли? Это было бы очень признательно и огромное ОГРОМНОЕ время. СПАСИБО!

ERROR MESSAGE: /Library/Python/2.7/site-packages/PIL/Image.py:2192: DecompressionBombWarning: Image size (208560540 pixels) exceeds limit of 89478485 pixels, could be decompression bomb DOS attack. 

ответ

11

PIL просто пытается защитить вас. Он не будет открывать большие изображения, поскольку это может быть вектор атаки для злонамеренного пользователя, чтобы дать вам большое изображение, которое будет расширяться, чтобы использовать всю память.

Поскольку вы не злоумышленник и не принимает изображения от кого-либо еще, вы можете просто отключить предел:

from PIL import Image 

Image.MAX_IMAGE_PIXELS = None 

Установка Image.MAX_IMAGE_PIXELS отключает проверку в целом. Вы также можете установить его (высокое) целое значение; по умолчанию int(1024 * 1024 * 1024/4/3), около 90 миллионов пикселей или около 250 МБ несжатых данных для 3-канального изображения.

Обратите внимание, что по умолчанию все, что происходит, это то, что выдается предупреждение . Можно также отключить предупреждение:

import warnings 
from PIL import Image 

warnings.simplefilter('ignore', Image.DecompressionBombWarning) 
2

От Pillow docs:

Предупреждение: Для защиты от возможных DOS атакует вызванные «decompression bombs» (т.е. вредоносных файлов, распаковывать в огромном количестве данные и предназначены для сбоя или возникновения сбоев за счет использования большого количества памяти), Pillow выдаст DecompressionBombWarning, если изображение превысит определенный предел. При желании предупреждение может быть преобразовано в ошибку с warnings.simplefilter('error', Image.DecompressionBombWarning) или полностью отключено warnings.simplefilter('ignore', Image.DecompressionBombWarning). См. Также , чтобы выводить предупреждения в хранилище вместо stderr.

Смежные вопросы