【问题标题】:Need help in following Python script在遵循 Python 脚本时需要帮助
【发布时间】:2020-06-14 14:10:45
【问题描述】:

我必须:

  1. 遍历文件夹中的每个文件
  2. 对于每个文件:
    将图像顺时针旋转 90°,

    将图像大小从 192x192 调整为 128x128,

    将图像以 .jpeg 格式保存到新文件夹

我编写了以下脚本:

    #!/usr/bin/env python3
import os
from PIL import Image

def load_images(folder):
    images = os.listdir(folder)
    dst = "/home/mayank/Music/"
    try:
        for img in images:
            with Image.open(img) as im:
                im = Image.open(folder + '/' + img)
                #Rotating Images 90 degree Clockwise
                new_im = im.rotate(-90)
                #Resizing all images from 192x192 to 128x128
                new_im = new_im.resize(128,128)
                #Saving all images in new file
                new_im.save(dst+"/"+new_im, format = "jpeg")
                im.close()

except IOError as e:
    print(e)


if __name__ == "__main__":
    dir = load_images("/home/mayank/Music/images/")

给定的路径是正确的,但是每当我执行此代码时,它会显示所有文件之间的某些文件的以下消息:

[Errno 2] No such file or directory: 'ic_directions_transit_white_48dp'

您可以通过以下代码下载图片:

curl -c ./cookie -s -L "https://drive.google.com/uc?export=download&id=$11hg55-dKdHN63yJP20dMLAgPJ5oiTOHF" > /dev/null | curl -Lb ./cookie "https://drive.google.com/uc?export=download&confirm=`awk '/download/ {print $NF}' ./cookie`&id=11hg55-dKdHN63yJP20dMLAgPJ5oiTOHF" -o images.zip && sudo rm -rf cookie

我该如何解决这个问题?

【问题讨论】:

    标签: python linux image curl error-handling


    【解决方案1】:

    您必须在线提供完整的文件路径

    with Image.open(img) as im:
    

    喜欢

    with Image.open(folder+img) as im:
    

    另外,对于连接文件路径,最好使用 os.path.join() func(它的操作系统类型无关),例如

    im = Image.open(os.path.join(folder,img))
    

    【讨论】:

    【解决方案2】:

    感谢您的所有建议,但在建议修改后我遇到了另一种情况。这是我修改后的代码:

    #!/usr/bin/env python3
    import os
    from PIL import Image
    import glob
    
    def load_images(folder):
        images = os.listdir(folder)
        dst = "/home/mayank/Music/"
        try:
            for img in images:
                with Image.open(folder+img) as im:
                    im = Image.open(os.path.join(folder+img))
                    #Rotating Images 90 degree Clockwise
                    new_im = im.rotate(-90)
                    #Resizing all images from 192x192 to 128x128
                    new_im = new_im.resize((128,128))
                    #Saving all images in new file
                    new_im.save(dst + new_im, format = "jpeg")
                    im.close()
    
        except IOError as e:
            print(e)
    
    
    if __name__ == "__main__":
        dir = load_images("/home/mayank/Music/images/")
    

    现在我遇到了另一种情况,即,

    Traceback (most recent call last):
      File "./images.py", line 26, in <module>
        dir = load_images("/home/mayank/Music/images/")
      File "./images.py", line 18, in load_images
        new_im.save(dst + new_im, format = "jpeg")
    TypeError: can only concatenate str (not "Image") to str
    

    【讨论】:

      【解决方案3】:

      我认为这是调整当前文件夹中图像文件大小的简单代码:

      #!/usr/bin/env python3
      
      import os,glob
      from PIL import Image
      
      newsize=(128,128)
      
      for file in glob.glob("ic_*):
      
          im=Image.open(file).convert('RGB') #to work with invdividual bands we have to convert it to RGB
          im.rotate(270).resize(newsize).save("/opt/icons/"+file,"JPEG") #you can replace /opt/icons with dir in which you want to store new format images
      

      【讨论】:

        【解决方案4】:

        如果您使用 .jpg 文件,此代码可以正常工作:

        import os
        from pathlib import Path
        from PIL import Image
        
        def load_images(folder):
            images = os.listdir(folder)
            p = Path(folder)
            for images in p.glob('*.jpg'):
                Im = Image.open(images)
                name= str(images.parent)+'/images/' +str(images.stem)+'.jpg'
                resizedIm = Im.resize((128,128))
                resizedIm.rotate(270).save(name)
        load_images('/home/mayank/Music/')
        

        【讨论】:

          【解决方案5】:
          #!/usr/bin/env python3
          
          import os
          import glob
          from PIL import Image
          
          resized_pictures=(128,128)
          
          for file in glob.glob("ic_*"):
          
            im=Image.open(file).convert('RGB')
          
            im.rotate(-90).resize(resized_pictures).save("/opt/icons/"+file,"JPEG")
          

          【讨论】:

            【解决方案6】:

            请试试这个,

                with Image.open(folder +  img) as im:
            
                           #im = Image.open(folder + '/' + img)
            

            其余代码不变

            【讨论】:

            • 感谢您的建议。你能帮我解决最新的问题吗
            • 所以输出将保存相同的输入图像文件名
            • 感谢您的建议。它真的帮助了我
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多