如何用Python将旋转后的图片以原文件名保存?
图片随机旋转并保留原文件名问题修复
目录结构
|------dir--| | |---- input--|-- 1.jpg | | |-- 2.jpg .. ... ... ...
需求
对input文件夹中的图片执行随机旋转操作,旋转后的图片以原文件名保存到output文件夹,期望输出目录结构:
| ---dir ---| | | | |---- output | | | |-- 1.jpg | | |-- 2.jpg .. ... ... ...
现有问题
运行提供的脚本后,output目录中生成的文件名是PIL Image对象的字符串表示(如R<PIL.Image.Image image mode=L size=988x128 at 0x7FD72613DBE0>.jpg),无法保留原文件名。
问题根源
循环过程中,存储原文件名的变量img被覆盖为PIL Image对象:
for img in imgs: img = Image.open(folder_dir+img) # 此处将文件名变量替换为Image对象
后续执行img.save(f'{out_dir}{img}.jpg')时,会把Image对象自动转为字符串,导致文件名异常。
修复后的代码
import torch import torchvision.transforms as T from PIL import Image import os folder_dir = "/dir/input/" out_dir = "/dir/output/" # 建议使用绝对路径,避免相对路径带来的问题 # 确保输出目录存在,不存在则自动创建 os.makedirs(out_dir, exist_ok=True) imgs = os.listdir(folder_dir) print(imgs) for img_name in imgs: # 拼接完整的输入图片路径 img_path = os.path.join(folder_dir, img_name) img = Image.open(img_path) # 定义随机旋转变换 transform = T.RandomRotation(degrees=(0, 360)) rotated_img = transform(img) # rotated_img.show() # 如需预览图片可取消注释 # 拼接完整的保存路径,使用原文件名保存 save_path = os.path.join(out_dir, img_name) rotated_img.save(save_path) print(f'{img_name} 处理完成')
关键修改说明
- 改用
img_name变量存储原文件名,避免被PIL Image对象覆盖 - 使用
os.path.join()拼接文件路径,适配不同操作系统的路径规则,避免路径拼接错误 - 添加
os.makedirs(out_dir, exist_ok=True)确保输出目录存在,防止保存图片时因目录不存在抛出异常 - 用
rotated_img接收旋转后的图片对象,清晰区分原图片和处理后的图片,避免变量混淆
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

