2010-06-28 4 views
8

이미지 파일을 가져 와서 변경 사항을 원본 파일에 저장하려고합니다. 문제는 원본 이미지를 덮어 쓰는 것입니다. filename에 손잡이를 놓을 수있는 확실한 방법이없는 것 같습니다.이미지를 닫는 방법?

외부 프로세스가 파일 이름에 따라 달라 지므로이 내용을 동일한 파일에 다시 저장해야합니다. I는 I 이미지의 사본을 만들어 예외 처리기를 첨가 할 때까지

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

작동했다. 또한 close() 이미지의 속성과 with image에 액세스하려고했지만 성공하지 못했습니다.

답변

16

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(...) 
+0

이렇게 가까이에서 나는 냄새를 맡을 수 있었을 것입니다. – Chris