如何迭代包含图像的目录和子目录,并在Python中将其保存为JPEG

如何迭代包含图像的目录和子目录,并在Python中将其保存为JPEG,python,Python,我正在尝试编写一些Python代码,这些代码将迭代一个目录中多个文件夹中的图像文件,如果它们具有.tif扩展名,我需要打开该文件,将其转换为大小为2500 x 2500的RGB,然后将其另存为jpeg。以下代码不起作用。在Python中实现这一点的最佳方法是什么?当我在文件夹中看到某个文件时,这不断给我一个错误,即该文件不存在: import os from PIL import Image for (dirname, dirs, files) in os.walk('S:/DAM/Test/A

我正在尝试编写一些Python代码,这些代码将迭代一个目录中多个文件夹中的图像文件,如果它们具有.tif扩展名,我需要打开该文件,将其转换为大小为2500 x 2500的RGB,然后将其另存为jpeg。以下代码不起作用。在Python中实现这一点的最佳方法是什么?当我在文件夹中看到某个文件时,这不断给我一个错误,即该文件不存在:

import os
from PIL import Image
for (dirname, dirs, files) in os.walk('S:/DAM/Test/Approved/'):
    for filename in files:
        if filename.endswith('.tif'):
           img = Image.open(filename).convert('RGB')
           imageResize = img.resize((2500, 2500))
           imageResize.save(filename.jpg)

您应该提供使用PIL库打开和保存图像的完整路径

假设您的目录结构类似于:

.
└── scriptfolder
       -- your-script.py
       -- picture.tif
       imagefolder
           -- picture2.tif
           -- picture3.jpg
           imagefolder2
               --example.jpg
               --example2.tif
               --whatever.png 
如果您使用的是Linux机器,并且脚本位于与映像相关的顶级目录中,则以下脚本应该可以工作:

# !/usr/bin/python3

from PIL import Image
import os

for root, dirs, files in os.walk(".", topdown = False):
   for name in files:
      if name.endswith('.tif'):
         filename = os.path.join(root, name)
         img = Image.open(filename).convert('RGB')
         imageResize = img.resize((2500,2500))
         imageResize.save(filename[:-4]+'.jpg','JPEG')
编辑

在Windows计算机中,您可以执行以下操作:

  • 安装适用于Windows的Python 3的干净版本(例如)
  • 以管理员身份运行安装程序,并在安装提示下确保标记为将Python环境变量添加到path并安装pip
  • 以管理员身份打开CMD并使用
    pip-install-Pillow
  • 打开IDLE并创建以下脚本:将'path_to_images'变量更改为存储图像的正确路径
  • 以F5怠速运行模块

  • 请提供完整的错误输出,以及一个。顺便说一句,我建议使用pathlib,而不是操作系统模块。包含图像和文件夹的路径与python脚本所在的驱动器完全不同。如何访问位于完全不同的驱动器和脚本上的文件夹和图像?我没有要测试的Windows计算机。但是如果是这种情况,您需要在进入for循环之前更改当前目录,并确保在尝试打开和保存图像时使用了整个路径和文件名。比我用几行就能写的好得多,这绝对值得一读。谢谢@DanielOcando。如果我想让代码在图像中循环,而不是硬编码代码中的每个文件名,那么如何使用整个路径和文件名?请注意,路径将存储在
    变量中,文件名本身将存储在我共享的代码for循环中的
    名称
    变量中,所以这部分应该保持不变。你需要像我上面提到的那样添加
    os.chdir()
    ,将当前目录更改为图像所在的目录,我认为你可以这样做。我尝试了这段代码,它创建了一个jpeg,但当它转到文件夹中的下一个文件时,我得到了OSError:-2。我需要做什么来修复代码从PIL导入os为os.walk('S:/DAM/Test/Approved/')中的root、dirs和文件导入映像:为文件中的名称导入:if name.endswith('.tif'):filename=os.path.join(root、name)img=Image.open(filename).convert('RGB')imageResize=img.resize((2500))imageResize.save(文件名[:-4]+'.jpg',JPEG')```
    from PIL import Image
    import os
    
    path_to_images = "D:\Images\Path-to-images"
    
    for root, dirs, files in os.walk(path_to_images, topdown = False):
       for name in files:
          if name.endswith('.tif'):
             filename = os.path.join(root, name)
             print(filename)
             img = Image.open(filename).convert('RGB')
             imageResize = img.resize((2500,2500))
             imageResize.save(filename[:-4]+"toJPEG.jpg",'JPEG')