Mac*_*cca 15 python tiff image python-imaging-library pillow
我是一名电影摄影师,他经常裁剪裁剪/调整图像.因为我拍摄胶片,我必须扫描我的底片,并从批量扫描中裁剪出每一帧.我的扫描仪扫描四条带,每条六张图像(每次扫描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.
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 26
PIL只是想保护你.它不会打开更大的图像,因为这可能是恶意用户的攻击向量,为您提供一个大图像,可以扩展以耗尽所有内存.
由于您不是恶意用户并且不接受其他任何人的图像,因此您可以简单地禁用该限制:
from PIL import Image
Image.MAX_IMAGE_PIXELS = None
Run Code Online (Sandbox Code Playgroud)
设置Image.MAX_IMAGE_PIXELS完全禁用检查.您也可以将其设置为(高)整数值; int(1024 * 1024 * 1024 / 4 / 3)对于3通道图像,默认值为近9000万像素或大约250MB未压缩数据.
请注意,默认情况下,发生的所有操作都是发出警告.您还可以禁用警告:
import warnings
from PIL import Image
warnings.simplefilter('ignore', Image.DecompressionBombWarning)
Run Code Online (Sandbox Code Playgroud)
相反,如果要阻止这些图像完全加载,请将警告转为例外:
import warnings
from PIL import Image
warnings.simplefilter('error', Image.DecompressionBombWarning)
Run Code Online (Sandbox Code Playgroud)
然后,您可以期望在Image.DecompressionBombWarning传递图像时将对象引发为异常,否则会占用大量内存.
从枕头文档:
警告:为了防止“解压炸弹”(即解压缩成大量数据的恶意文件,旨在通过使用大量内存而崩溃或造成中断)引起的潜在 DOS 攻击,Pillow 将发出一个
DecompressionBombWarningif the image超过了一定的限度。如果需要,可以使用 将警告转换为错误warnings.simplefilter('error', Image.DecompressionBombWarning)或完全抑制warnings.simplefilter('ignore', Image.DecompressionBombWarning)。另请参阅日志记录文档以将警告输出到日志记录工具而不是 stderr。