Python PIL:裁剪多个图像会导致冻结和内存泄漏



我正在尝试用PIL裁剪多个图像(数千个(,并将结果保存到磁盘。然而,在只裁剪了几百张图像并成功保存后,该程序使用了17.5 GB的RAM,并且需要很长时间才能创建下一个裁剪。之后,它只输出另外两个图像,每个图像的大小为65535×65535像素(原始图像均为1920x1080(,然后循环完成。

我的代码:

import PIL
from PIL import Image
PIL.Image.MAX_IMAGE_PIXELS = 4294836225
for path in paths:
   with Image.open(path) as img:
      left, top, right, bottom = calculate_crop(...)
      cropped = img.crop((left, top, right, bottom))
      cropped.save(new_path, 'png')
      cropped.close()

没有异常被触发(我也尝试过使用try/except(。我是不是做错了什么,或者这可能是图书馆里的一个bug?

好的,根据PIL内存泄漏github论坛,问题是处理程序停止对文件调用.close((方法,或者至少没有立即调用。我建议您自己手动打开和关闭文件。然而,这可能只能解决部分问题。

最新更新