2014-09-06 28 views
7

Jestem fotografem filmowym, który zajmuje się przycinaniem/zmienianiem rozmiaru obrazu. Ponieważ filmuję, muszę skanować negatywy i wycinać każdą ramkę ze skanowania wsadowego. Mój skaner skanuje cztery paski po sześć obrazów każdy (24 klatki/uprawy na skan).Narzędzie do przycinania obrazu (Python)

Przyjaciel napisał do mnie skrypt do Pythona, który automatycznie przycina obrazy na podstawie wprowadzonych współrzędnych Skrypt działa dobrze, ale ma problemy z formatem eksportowanych obrazów.

Ze skanowania każda klatka powinna wytworzyć 37-megowy TIFF w 240 DPI (gdy przycinam i eksportuję w Adobe Lightroom). Zamiast tego Cropper generuje TIFF 72 DPI 72 DPI.

Terminal (Jestem na Macu) ostrzega mnie przed "bombą dekompresyjną" za każdym razem, gdy uruchamiam Croppera. Mój przyjaciel jest zakłopotany i zasugerował, żebym zapytał Stack Overflow.

Nie mam doświadczenia w Pythonie. Mogę podać kod, który napisał, i polecenia, które daje mi Terminal.

Myśli? Byłoby to bardzo docenione i ogromny OGROMNY plik. DZIĘKUJEMY!

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. 

Odpowiedz

11

PIL tylko próbuje cię ochronić. Nie otworzy większych obrazów, ponieważ może to być wektor ataku złośliwego użytkownika, który da ci duży obraz, który rozszerzy się, aby zużyć całą pamięć.

Ponieważ nie jesteś złośliwy użytkownik nie akceptuje obrazy z nikim innym, można po prostu wyłączyćlimit:

from PIL import Image 

Image.MAX_IMAGE_PIXELS = None 

Ustawianie Image.MAX_IMAGE_PIXELS wyłącza sprawdzanie całkowicie. Możesz także ustawić ją na (wysoką) wartość całkowitą; domyślną wartością jest int(1024 * 1024 * 1024/4/3), prawie 90 milionów pikseli lub około 250 MB nieskompresowanych danych dla obrazu 3-kanałowego.

Należy pamiętać, że domyślnie wydarza się ostrzeżenie . Można również wyłączyć ostrzeżenie:

import warnings 
from PIL import Image 

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

Z Pillow docs:

Ostrzeżenie: W celu ochrony przed potencjalnym ataków DoS powodowane przez „decompression bombs” (tj szkodliwych plików, które zdekompresować do ogromnej ilości danych i są zaprojektowane do awarii lub zakłóceń przez zużywanie dużej ilości pamięci), Pillow wyda DecompressionBombWarning, jeśli obraz przekroczy określony limit. W razie potrzeby ostrzeżenie może zostać zmienione na błąd z warnings.simplefilter('error', Image.DecompressionBombWarning) lub wyłączone całkowicie z warnings.simplefilter('ignore', Image.DecompressionBombWarning). Zobacz także the logging documentation, aby ostrzeżenia były wyprowadzane do obiektu rejestrowania zamiast stderr.