我正在尝试用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((方法,或者至少没有立即调用。我建议您自己手动打开和关闭文件。然而,这可能只能解决部分问题。