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

使用PIL的Image.thumbnail保存图片报错:NoneType无save属性

问题解决:NoneType object has no attribute save

错误原因

你的代码里这一行是核心问题:

img = img.thumbnail(size, resample=PIL.Image.NEAREST)

Image.thumbnail()是原地修改图片对象的方法,它不会返回新的Image实例,执行后返回的是None。你把这个返回值赋值给img,导致后续img.save()调用时,img已经变成None,所以触发了这个错误。

修正后的代码

from PIL import Image
import os
from glob import glob

# 遍历当前目录下所有png文件
imgs = [y for x in os.walk(".") for y in glob(os.path.join(x[0], '*.png'))]

target_size = (32, 32)
last_dir = None

for file_path in imgs:
    # 打开图片
    img = Image.open(file_path)
    # 直接调用thumbnail,不需要重新赋值
    img.thumbnail(target_size, resample=Image.NEAREST)
    
    # 替换路径中的img为icon
    new_file_path = file_path.replace('img', 'icon', 1)
    # 避免重复添加.png后缀
    if not new_file_path.endswith('.png'):
        new_file_path += '.png'
    
    # 创建目标目录(exist_ok=True避免重复创建报错)
    target_dir = os.path.dirname(new_file_path)
    os.makedirs(target_dir, exist_ok=True)
    
    # 打印目录信息(仅当目录变化时)
    if target_dir != last_dir:
        print(target_dir)
        last_dir = target_dir
    
    # 保存图片
    img.save(new_file_path, "PNG")

额外优化说明

  • 简化PIL导入,直接用Image.NEAREST即可,无需单独导入PIL模块
  • 用os.makedirs(target_dir, exist_ok=True)替代try-except块,代码更简洁
  • 增加后缀检查,避免原文件已为.png时,保存成xxx.png.png的问题
  • 变量名更清晰(如file改为file_path,dir改为target_dir),避免与内置关键字冲突

内容的提问来源于stack exchange,提问作者Lufims

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:45:38