Python Pillow调整图片大小保存报错:Error seek of closed file
解决Pillow调整图片保存时的“Error seek of closed file”错误
问题分析
你的代码存在几个核心问题引发了报错:
- 未定义
new_name变量:直接使用new_name作为保存路径,但该变量从未声明,不仅会触发NameError,还会间接导致文件操作异常。 - 错误处理
save()返回值:resized_img.save()的返回值是None,将其赋值给new_image并返回没有实际意义。 - 文件生命周期管理不当:手动调用
img.close()的时机可能存在问题,即便用with语句,若传入的file是已关闭的文件流,也会导致Pillow无法读取数据。
修正后的代码
from PIL import Image def resize_image(file_path, new_save_path): # with语句自动管理文件,无需手动执行close with Image.open(file_path) as img: # 计算新尺寸 orig_height = img.height orig_width = img.width scale_ratio = orig_height / 140 new_height = 140 new_width = int(orig_width / scale_ratio) # 执行尺寸调整 resized_img = img.resize((new_width, new_height), resample=Image.BICUBIC) # 保存图片,save方法无返回值,直接执行即可 resized_img.save(new_save_path) # 若需要返回处理后的图片对象,可重新打开返回 # return Image.open(new_save_path) return new_save_path # 返回保存路径更实用
关键注意事项
- 传入合法的保存路径:调用函数时必须传入完整的
new_save_path(例如"./output/resized_photo.png"),否则会触发路径相关错误。 with语句的必要性:with Image.open(...) as img会在代码块结束后自动关闭文件,避免手动close()可能带来的时序冲突。- 正确传入文件参数:如果传入的是文件路径字符串,Pillow会自动处理文件的打开/关闭;如果传入的是文件对象,要确保它处于可读、未关闭的状态。
- 理解
save()的作用:该方法直接将图片写入指定路径,本身不返回有效对象,返回None是正常行为。
内容的提问来源于stack exchange,提问作者Cflux
相关产品推荐
相关产品推荐

