[英]Image Cropping Tool (Python)
我是一名電影攝影師,經常處理裁剪/圖像大小調整。 因為我拍攝膠片,我必須掃描我的底片並從批量掃描中裁剪每一幀。 我的掃描儀掃描四個條帶,每條六幅圖像(每次掃描 24 幀/裁剪)。
我的一個朋友給我寫了一個 Python 腳本,它根據輸入的坐標自動裁剪圖像。 該腳本運行良好,但導出圖像的文件格式存在問題。
從掃描來看,每幀都應該在 240 DPI 下產生一個 37mb 的 TIFF(當我在 Adobe Lightroom 中裁剪和導出時)。 相反,Cropper 輸出 13mb 72 DPI TIFF。
每當我運行 Cropper 時,終端(我在 Mac 上)都會警告我“減壓炸彈”。 我的朋友被難住了,建議我問 Stack Overflow。
我沒有 Python 經驗。 我可以提供他寫的代碼和終端給我的命令。
想法? 這將不勝感激,並且可以節省大量時間。 謝謝你!
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.
PIL 只是想保護您。 它不會打開較大的圖像,因為這可能是惡意用戶的攻擊媒介,可以為您提供會擴展以耗盡所有內存的大圖像。 引用PIL.Image.open()
文檔:
警告:為了防止“解壓炸彈”(即解壓成大量數據的惡意文件,旨在通過使用大量內存而崩潰或造成中斷)引起的潛在 DOS 攻擊,Pillow 將發出
DecompressionBombWarning
如果圖像超過一定限度。
由於您不是惡意用戶並且不接受來自其他任何人的圖像,您可以簡單地禁用限制:
from PIL import Image
Image.MAX_IMAGE_PIXELS = None
設置Image.MAX_IMAGE_PIXELS
會完全禁用檢查。 您還可以將其設置為(高)整數值; 默認為1024 * 1024 * 1024 // 4 // 3
,近 9000 萬像素或大約 250MB 的 3 通道圖像未壓縮數據。
請注意,對於高達 4.3.0 的 PIL 版本,默認情況下,發生的只是發出警告。 您還可以禁用警告:
import warnings
from PIL import Image
warnings.simplefilter('ignore', Image.DecompressionBombWarning)
相反,如果您想完全阻止加載此類圖像,請將警告轉換為異常:
import warnings
from PIL import Image
warnings.simplefilter('error', Image.DecompressionBombWarning)
然后您可以期望Image.DecompressionBombWarning
對象在您傳遞圖像時作為異常引發,否則將需要大量內存。
從PIL v5.0.0 (2018 年 1 月發布)開始,使用兩倍於MAX_IMAGE_PIXELS
值的像素數的圖像將導致PIL.Image.DecompressionBombError
異常。
請注意,這些檢查也適用於Image.crop()
操作(您可以通過裁剪創建更大的圖像),如果您想從中受益,您需要使用 PIL 6.2.0 或更高版本(2019 年 10 月發布)使用 GIF 或 ICO 文件時的保護。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.