我需要将图像旋转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"))
答案 0 :(得分:0)
您的代码有效(我已经对其进行了测试)。这是一个改进的版本,可以将每个图像旋转提到的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。
答案 1 :(得分:0)
您的确切代码按原样完美工作:给定图像original.jpg
,它会翻转(旋转180度)并将其保存为original_r180.jpg
。 os.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)))