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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:32:21