【问题标题】:Rotation of images图像旋转
【发布时间】:2019-05-29 20:33:09
【问题描述】:

我需要将图像旋转 90、180 和 270 度。我不需要复制图像,而是将旋转后的图像另存为单独的图像。到目前为止,我的代码将旋转图像,但不会将其保存为自己的单独文件。这是我目前所拥有的。

import os
import glob
from PIL import Image
os.chdir("./")
for file in glob.glob("*.jpg"):
    image = Image.open(file)
    image_rot_180 = image.rotate(180)
    image_rot_180.save(file.replace(".jpg", "_r180.jpg"))

【问题讨论】:

    标签: python windows image python-2.7 rotation


    【解决方案1】:

    您的确切代码按原样完美运行:给定图像 original.jpg,它翻转(旋转 180 度)并将其保存为 original_r180.jpgos.chdir 是无关紧要的,因为切换到当前目录是一个空操作,但这并没有错。

    如果您需要同时执行这三个操作,请考虑以下事项:

    import glob
    from PIL import Image
    os.chdir("./")
    for file in glob.glob("*.jpg"):
        for angle in (90, 180, 270):
            image = Image.open(file)
            image_rot = image.rotate(angle)
            image_rot.save(file.replace(".jpg", "_r{0}.jpg".format(angle)))
    

    【讨论】:

      【解决方案2】:

      您的代码有效(我测试过)。这是一个改进的版本,将每个图像旋转 3 个提到的角度并保存。

      code.py

      #!/usr/bin/env python3
      
      import sys
      import os
      import glob
      from PIL import Image
      
      
      def main():
          img_dir = "./img"
          jpg_ext = ".jpg"
          angles = [90, 180, 270]
          for file_name in glob.iglob(os.path.join(img_dir, "*" + jpg_ext)):
              image = Image.open(file_name)
              for angle in angles:
                  rot_suffix = "_r{:03d}{:s}".format(angle, jpg_ext)
                  file_name_rot = file_name.replace(jpg_ext, rot_suffix)
                  image_rot = image.rotate(angle)
                  image_rot.save(file_name_rot)
                  print("Rotated: {:s} by {:3d} degrees to {:s}".format(file_name, angle, file_name_rot))
      
      
      if __name__ == "__main__":
          print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
          main()
          print("\nDone.")
      

      输出

      [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056368107]> dir /b .\img
      image.jpg
      script_file.py
      
      [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056368107]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code.py
      Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
      
      Rotated: ./img\image.jpg by  90 degrees to ./img\image_r090.jpg
      Rotated: ./img\image.jpg by 180 degrees to ./img\image_r180.jpg
      Rotated: ./img\image.jpg by 270 degrees to ./img\image_r270.jpg
      
      Done.
      
      [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q056368107]> dir /b .\img
      image.jpg
      image_r090.jpg
      image_r180.jpg
      image_r270.jpg
      script_file.py
      

      有关对字符串执行的操作的更多详细信息,请查看[Python 3.Docs]: Format String Syntax

      【讨论】:

      • OP 试图以不同的名称保存,覆盖原件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多