Применение фильтра к каждой фотографии в каталоге

#python

#python

Вопрос:

Я новичок в python, так что полегче со мной! Я пытаюсь применить размытие к каждому изображению формата bmp в папке. Я могу заставить первую половину кода работать, поэтому фильтр применяется ко всем фотографиям, но затем я не могу заставить его повторно сохранять каждое изображение. Я хочу сохранить исходные изображения и добавить новые изображения в папку. Вот что у меня есть:

 from PIL import Image from PIL import ImageFilter import os, fileinput, sys

##for every item in X folder that ends in X, apply a basic blur to the image##

for entry in os.scandir('/Users/kh'): 
    if entry.path.endswith('.bmp'):
        img = Image.open(entry.path)
        img = img.filter(ImageFilter.BoxBlur(2))

        img.show()

        ##and then re-save each of those new images under a new filename##

        # Split our original filename into name and extension
        (name, extension) = os.path.splitext(filepath)

        # Save with "_blur" added to the filename
        img.save(name   '_blur'   extension)

        # Save the image as a BMP
        img.save(name   '.bmp')
  

Я перепробовал кучу других вещей, но этот код самый близкий, который у меня есть. Большое спасибо за вашу помощь.

Комментарии:

1. какая операция сохранения завершается с ошибкой? Первое или второе? Зачем вам нужно сохранять исходный файл? это уже на диске — верно?

2. Это ошибка, которую я получаю: ValueError: неизвестное расширение файла. Извините за путаницу — мне не нужно сохранять исходный файл, просто сохраните исходный файл И сохраните новый файл как «originalfile_blur»

Ответ №1:

Я попробовал ваш код. Я на самом деле получаю:

Ошибка имени: имя ‘filepath’ не определено

потому что у вас есть, filepath который должен быть entry.path :

 (name, extension) = os.path.splitext(entry.path)
  

Помимо этого, ваш код работает, за исключением того, что у вас оба изображения размыты. Последняя строка:

 img.save(name   '.bmp')
  

очистка не требуется, она перезаписывает исходные изображения размытыми.

Комментарии:

1. Это сделало это! Большое спасибо за помощь.

2. О, подождите! Это работает, но это продолжается бесконечно, так что, когда в папку добавляется новый file_blur, он находит его, продолжая поиск в каталоге. В итоге я получил file_blur_blur и file_blur_blur_blur и т.д. Как мне сказать, чтобы это прекратилось в этом случае?

3. Неважно. Только что добавлено: если entry.path.endswith(‘_blur’): break

4. Забавно, что это случилось не со мной. Возможно, это какое-то поведение системы или версии, я не уверен. Я использовал python3.6 в Linux. Но вы не должны использовать break , вы должны использовать continue , я думаю. В противном случае вы можете потерять некоторые изображения. Или вы повторяетесь os.scandir('/Users/kh') несколько раз?

5. Я использую python 3.6 на macOS. Вместо этого я попробую continue . В идеале я хочу перебрать каталог только один раз.