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

Я новичок в питоне, так что полегче со мной! Я пытаюсь применить размытие к каждому изображению .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')

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

какая операция сохранения не удалась? Первый или второй? Зачем нужно сохранять исходный файл? он уже на диске - верно?

balderman 09.03.2019 21:14

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

user11177000 09.03.2019 21:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
800
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попробовал ваш код. Я действительно получаю:

NameError: name 'filepath' is not defined

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

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

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

img.save(name + '.bmp')

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

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

user11177000 09.03.2019 21:59

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

user11177000 09.03.2019 22:07

Неважно. Только что добавлено: if entry.path.endswith('_blur'): break

user11177000 09.03.2019 22:16

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

Valentino 09.03.2019 22:31

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

user11177000 09.03.2019 23:08

Другие вопросы по теме