Кажется, что объект изображения не закрылся должным образом, даже если был использован оператор ... as ... - PIL Python - PullRequest
0 голосов
/ 12 февраля 2020

Я использую скрипт для изменения размера изображений в указанной папке c. Сценарий выглядит следующим образом:

def RESIZE_IMAGES_IN_FOLDER(new_images_path): #requires absolute path
os.chdir(new_images_path)
lst = [item.name for item in os.scandir(new_images_path) if item.is_file()]
for item in lst:
    try:
        with Image.open(item) as img:
            limit = 1000 #change this according to needs
            if (img.height>limit) or (img.width>limit):
                print ("Now resizing image file " + item + " ...")
                if img.height > img.width:
                    cover = resizeimage.resize_height(img, 1000)#resize_contain might be needed
                else:
                    cover = resizeimage.resize_width(img, 1000)#resize_contain might be needed
                cover.save(item, img.format)
                print ("***Image file " + item + " resized successfully to " + str(cover.size) + " ***")
            else:
                print("---Image file " + item + " with dimensions " + str(img.size) + " did not exceed " + str(limit) + "px in any dimension.---")
    except IOError as i:
        print(str(i))

Дело в том, что, хотя сценарий был выполнен и я использовал блок:

with Image.open(item) as img:

, так что оператор Image.close () не было необходимости, я попытался переместить папку после этого, и получил сообщение Windows, что файлы в папке, где все еще используется другой программой. Как только я закрыл оболочку Python, с которой работал, проблема прекратилась. Это подсказка, что какой-то объект Image не был правильно закрыт? В какой момент это могло произойти?

...