如何使用for循环将图像保存在文件夹中?

时间:2019-05-26 06:47:50

标签: python image resize processing rescale

首先,我将每个具有相同名称的调整大小的文件保存到同一文件夹时遇到问题?其次,在运行时,我无法理解代码是否正常运行。请,您能检查一下我是否在正确地调整大小吗?找不到我的代码中的错误:

import glob
from PIL import Image
images = glob.glob("C:/Users/marialavrovskaa/Desktop/Images/*.png")
for image in images:
    with open(image,"rb") as file:
        img = Image.open(file)
        imgResult = img.resize((800,800), resample = Image.BILINEAR)
      imgResult.save('"C:/Users/marialavrovskaa/Desktop/Images/file_%d.jpg"', 'JPEG')
        print("All good")

1 个答案:

答案 0 :(得分:1)

如果要给图像起一个连续的名称,而不是将文件名和计数器连接起来:

image_no = 1
for image in images:

    # [...]

    name = 'C:/Users/marialavrovskaa/Desktop/Images/file_' + str(image_no) + '.jpg'
    imgResult.save(name, 'JPEG')
    image_no += 1

由于图像的格式为 PNG ,并且应将其存储为JPEG,因此必须将格式从 RGBA 转换为 RGB ,由.convert('RGB')。请注意,将RGBA图片存储到“ JPGE”会导致错误:

import glob
from PIL import Image
images = glob.glob("C:/Users/marialavrovskaa/Desktop/Images/*.png")
image_no = 1
for image in images:
    with open(image,"rb") as file:
        img = Image.open(file)
        imgResult = img.resize((800,800), resample = Image.BILINEAR).convert('RGB')
        name = 'C:/Users/marialavrovskaa/Desktop/Images/file_' + str(image_no) + '.jpg'
        imgResult.save(name, 'JPEG')
        image_no += 1
        print("All good")

顺便说一句,如果应保留文件名,而图像仅应存储到具有不同扩展名的文件中,则可以使用.splitext将扩展名从文件中拆分出来:

import os
imgResult = img.resize((800,800), resample = Image.BILINEAR).convert('RGB')
name = os.path.splitext(image)[0] + '.jpg'
imgResult.save(name, 'JPEG')

如果您想将文件存储到具有不同扩展名的其他路径,则必须从路径中提取文件名。

请参见os.path。用os.path.split(path)分隔文件名和扩展名中的路径,这将返回路径和名称的元组。

例如

>>> import os
>>> os.path.split('c:/mydir/myfile.ext')
('c:/mydir', 'myfile.ext')

os.path.splitext(path)分割文件名和扩展名:

>>> os.path.splitext('myfile.ext')
('myfile', '.ext')

应用于您的代码,这意味着file是源图像文件的路径,名称和扩展名:

import glob
from PIL import Image
images = glob.glob("C:/Users/marialavrovskaa/Desktop/Images/*.png")
image_no = 1
for image in images:
    with open(image,"rb") as file:
        img = Image.open(file)
        imgResult = img.resize((800,800), resample = Image.BILINEAR).convert('RGB')

        image_path_and_name = os.path.split(file) 
        image_name_and_ext = os.path.splitext(image_path_and_name[1]) 
        name = image_name_and_ext[0] + '.png'
        file_path = os.path.join(path, name)

        imgResult.save(file_path , 'JPEG')
        image_no += 1
        print("All good")