GIMP未从内存卸载已关闭图像问题求助
解决GIMP已关闭图像残留内存/导出多余文件的问题
问题描述
关闭的图像并未从GIMP工作内存中移除,即使这些图像已不再显示。视觉上仅打开4张图像,但导出时会生成5张JPG,多余的那张是之前编辑、导出并保存为XCF的旧图像。长期保持GIMP开启(数周)会导致内存占用过高,而短期使用后关闭程序的用户通常不会遇到这个问题。
代码确认
以下为调用的标准实现代码,经调试无逻辑问题,判断为GIMP的残留机制bug:
image_list = gimp.image_list() image_ptr = len(image_list) for image in image_list: fullfilepath = os.path.join(output_folder, filename) fullfilepath = clean_string(fullfilepath) if (overwrite_index == 1): fullfilepath = get_clean_filename(fullfilepath) if (fullfilepath != ""): raw_filename = filename.encode('utf-8') pdb.gimp_file_save(image, image.active_layer, fullfilepath, raw_filename) pdb.gimp_image_clean_all(image)
解决方案
彻底关闭图像,而非仅关闭窗口
GIMP中点击窗口右上角叉号只是隐藏图像,并未从内存移除。需通过图像 -> 关闭图像(快捷键Ctrl+W),或在图像标签右键选择关闭,才能彻底释放内存。修改脚本添加强制删除逻辑
在保存并清理图像后,调用pdb.gimp_image_delete(image)彻底删除图像对象,避免残留。修改后的代码片段:
image_list = gimp.image_list() image_ptr = len(image_list) for image in image_list: fullfilepath = os.path.join(output_folder, filename) fullfilepath = clean_string(fullfilepath) if (overwrite_index == 1): fullfilepath = get_clean_filename(fullfilepath) if (fullfilepath != ""): raw_filename = filename.encode('utf-8') pdb.gimp_file_save(image, image.active_layer, fullfilepath, raw_filename) pdb.gimp_image_clean_all(image) pdb.gimp_image_delete(image) # 新增:彻底删除图像释放内存
定期手动清理内存
进入编辑 -> 偏好设置 -> 内存与磁盘,点击清理内存按钮强制释放未使用资源。也可设置自动清理阈值,当内存占用超过设定比例时自动触发清理。通过图像面板管理残留图像
打开窗口 -> 可停靠对话框 -> 图像面板,这里会显示内存中所有存在的图像(包括隐藏的)。选中残留图像后右键选择关闭图像即可手动清理。
内容的提问来源于stack exchange,提问作者Bjarne
相关产品推荐
相关产品推荐

