Python使用PIL处理图片灰度与缩放时无报错且无输出文件如何解决
问题原因梳理
- 核心问题:你仅定义了
greyScaleAndSize函数,没有主动调用执行,所以代码运行后无任何动作,也不会触发报错。 - 路径硬编码错误:当前代码固定读取单张
lab 11 logos.jpg,没有实现读取9张图片的逻辑,也没有处理不同图片的文件名。 - 缩放参数错误:PIL的
resize方法要求传入整数类型的宽高值,直接传入i*0.5这类浮点数会执行失败,且现有缩放逻辑不符合需求——你需要的是固定缩放到原尺寸的1/2,不是随循环变量变化的动态尺寸。 - 缺少新文件夹路径配置:现有保存路径没有指向独立的新文件夹,也没有区分不同原始图片的命名,会出现文件覆盖问题。
修正后可运行代码
import os from PIL import Image def greyScaleAndSize(src_folder, dst_folder, num_images=9): # 先创建目标文件夹,不存在就自动生成 os.makedirs(dst_folder, exist_ok=True) # 遍历文件夹里的9张图片,默认图片命名为1.jpg到9.jpg,可根据实际命名规则调整 for i in range(1, num_images + 1): # 拼接原始图片路径 src_path = os.path.join(src_folder, f"{i}.jpg") if not os.path.exists(src_path): print(f"跳过不存在的文件:{src_path}") continue # 读取、转灰度、缩放 img = Image.open(src_path) img_greyscale = img.convert('L') # 计算原尺寸1/2的宽高,转成整数适配resize方法要求 new_width = int(img.width * 0.5) new_height = int(img.height * 0.5) img_resized = img_greyscale.resize((new_width, new_height)) # 保存到目标文件夹 dst_path = os.path.join(dst_folder, f"{i}__grey__{new_width}x{new_height}.jpg") img_resized.save(dst_path) img.close() # 主动调用函数才会执行,替换为你自己的实际路径即可 src_dir = "N:/Fall 2021/DataScienceIntroToPython/Lab 11/lab 11 logos" dst_dir = "N:/Fall 2021/DataScienceIntroToPython/Lab 11/processed_logos" greyScaleAndSize(src_dir, dst_dir)
补充说明
如果你的图片命名不是1.jpg到9.jpg,自行调整遍历逻辑里的文件名拼接规则即可;路径统一用os.path.join拼接可以避免不同操作系统的路径分隔符兼容问题。
内容的提问来源于stack exchange,提问作者Orianna Sanele
相关产品推荐
相关产品推荐

