#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
. В идеале я хочу перебрать каталог только один раз.