2014-09-06 7 views
7

Ich bin ein Film-Fotograf, der viel mit dem Zuschneiden/Bildgrößenanpassung beschäftigt. Da ich Filmaufnahmen mache, muss ich meine Negative einscannen und jeden Frame aus dem Stapel scannen. Mein Scanner scannt vier Streifen zu je sechs Bildern (24 Bilder pro Bild).Image Cropping-Tool (Python)

Ein Freund von mir schrieb mir ein Skript für Python, das automatisch Bilder basierend auf eingegebenen Koordinaten schneidet. Das Skript funktioniert gut, hat jedoch Probleme im Dateiformat der exportierten Bilder.

Aus dem Scan sollte jeder Rahmen ein 37mb TIFF bei 240 DPI erzeugen (wenn ich in Adobe Lightroom zuschneide und exportiere). Stattdessen gibt der Cropper ein 13mb 72 DPI TIFF aus.

Terminal (Ich bin auf Mac) warnt mich vor einer "Dekompressionsbombe", wenn ich den Cropper laufen lasse. Mein Freund ist ratlos und schlug vor, dass ich Stack Overflow anfrage.

Ich habe keine Python-Erfahrung. Ich kann den Code, den er geschrieben hat, und die Befehle, die Terminal mir gibt, liefern.

Gedanken? Dies würde sehr geschätzt werden und eine riesige riesige Zeit sparen. DANKE!

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. 

Antwort

11

PIL versucht nur, Sie zu schützen. Größere Bilder werden nicht geöffnet, da dies ein Angriffsvektor für einen böswilligen Benutzer sein könnte, der Ihnen ein großes Bild gibt, das erweitert wird, um den gesamten Speicher zu verbrauchen.

Da Sie nicht ein böswilliger Benutzer sind und nicht Bilder von irgend jemandem anderen zu akzeptieren, können Sie einfach deaktivieren die Grenze:

from PIL import Image 

Image.MAX_IMAGE_PIXELS = None 

Einstellung Image.MAX_IMAGE_PIXELS deaktiviert den Scheck zusammen. Sie können es auch auf einen (hohen) ganzzahligen Wert setzen; Der Standardwert ist int(1024 * 1024 * 1024/4/3), fast 90 Millionen Pixel oder etwa 250 MB unkomprimierte Daten für ein 3-Kanal-Bild.

Beachten Sie, dass standardmäßig Warnung ausgegeben wird. Sie könnten auch die Warnung deaktivieren:

import warnings 
from PIL import Image 

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

Vom Pillow docs:

Warnung: gegen mögliches DOS Zum Schutz von „decompression bombs“ (dh schädlichen Dateien verursachen Angriffe, die in eine riesige Menge dekomprimieren von Daten und sind so konstruiert, dass sie abstürzen oder eine Störung verursachen, indem sie viel Speicher verbrauchen). Pillow gibt DecompressionBombWarning aus, wenn das Bild über einem bestimmten Grenzwert liegt. Falls gewünscht, kann die Warnung in einen Fehler mit warnings.simplefilter('error', Image.DecompressionBombWarning) umgewandelt werden oder vollständig mit warnings.simplefilter('ignore', Image.DecompressionBombWarning) unterdrückt werden. Siehe auch the logging documentation, damit Warnungen anstelle von stderr an die Protokollierungsfunktion ausgegeben werden.

Verwandte Themen