You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pillow调整图片大小保存报错:Error seek of closed file

解决Pillow调整图片保存时的“Error seek of closed file”错误

问题分析

你的代码存在几个核心问题引发了报错:

  1. 未定义new_name变量:直接使用new_name作为保存路径,但该变量从未声明,不仅会触发NameError,还会间接导致文件操作异常。
  2. 错误处理save()返回值:resized_img.save()的返回值是None,将其赋值给new_image并返回没有实际意义。
  3. 文件生命周期管理不当:手动调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:47:18