图像裁剪工具(Python)



我是一名电影摄影师,经常处理裁剪/图像大小调整。因为我拍电影,我必须扫描我的底片,并从批量扫描中裁剪出每一帧。我的扫描仪扫描四条,每条六幅图像(每次扫描24帧/裁剪)。

我的一个朋友给我写了一个Python脚本,它可以根据输入的坐标自动裁剪图像。该脚本运行良好,但在导出图像的文件格式方面存在问题。

从扫描中,每一帧都应该以240 DPI生成37mb TIFF(当我在Adobe Lightroom中裁剪和导出时)。相反,Cropper会输出13mb 72 DPI TIFF。

终端(我在Mac上)每当我运行Cropper时都会警告我"减压炸弹"。我的朋友被难住了,建议我问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万像素或3通道图像的约250MB未压缩数据。

请注意,对于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()操作(您可以通过裁剪创建更大的图像),如果您想在处理GIF或ICO文件时受益于此保护,则需要使用PIL版本6.2.0或更新版本(2019年10月发布)。

来自枕头文档:

警告:为了防止"解压缩炸弹"(即恶意文件,这些文件解压缩成大量数据,并被设计为通过占用大量内存而崩溃或造成中断)引起的潜在DOS攻击,如果图像超过一定的限制,Pillow将发出DecompressionBombWarning。如果需要,可以使用warnings.simplefilter('error', Image.DecompressionBombWarning)将警告转换为错误,或者使用warnings.simplefilter('ignore', Image.DecompressionBombWarning)将其完全抑制。另请参阅日志记录文档,以便将警告输出到日志记录工具,而不是stderr。

最新更新