Как закрыть изображение?

Я пытаюсь взять файл изображения, сделать некоторый материал к нему и сохранить изменения назад в исходном файле. Проблема, которую я имею, находится в перезаписи исходного изображения; кажется, нет надежного способа выпустить дескриптор на filename.

Мне нужно это содержание, которое будет сохранено назад в тот же файл, потому что внешние процессы зависят от того имени файла для оставлений такого же.

def do_post_processing(filename):
    image = Image.open(str(filename))
    try:
        new_image = optimalimage.trim(image)
    except ValueError as ex:
        # The image is a blank placeholder image.
        new_image = image.copy()
    new_image = optimalimage.rescale(new_image)
    new_image.save('tmp.tif')
    del image

    os.remove(str(filename))
    os.rename('tmp.tif', str(filename))

del image работал, пока я не добавил обработчик исключений, где я сделал копию изображения. Я также попытался получить доступ к a close() атрибут Изображения и with image, никакой успех.

8
задан Chris 28 June 2010 в 19:03
поделиться

1 ответ

В функцию Image.open вместо имени файла можно передать объект, похожий на файл. Попробуйте так:

def do_post_processing(filename):
    with open(str(filename), 'rb') as f:
        image = Image.open(f)
        ...
        del new_image, image
    os.remove(str(filename))
    os.rename(...)
16
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: