Как сохранить изображения в папке с циклом? - PullRequest
1 голос
/ 26 мая 2019

Во-первых, у меня проблема с сохранением каждого файла с измененным размером с тем же именем в одну и ту же папку? Во-вторых, во время работы я не могу понять, правильно ли работает т-код. Не могли бы вы проверить, правильно ли я изменяю размер? Не могу найти ошибку в моем коде:

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 Ответ

1 голос
/ 26 мая 2019

Если вы хотите присвоить изображениям имя с порядковым номером, чем объединять имя файла и счетчик:

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")
...