Я пытаюсь взять файл изображения, сделать некоторый материал к нему и сохранить изменения назад в исходном файле. Проблема, которую я имею, находится в перезаписи исходного изображения; кажется, нет надежного способа выпустить дескриптор на 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
, никакой успех.
В функцию 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(...)