2010-06-28 37 views
8

我想拍攝一個圖像文件,對它做一些東西並將更改保存回原始文件。我遇到的問題是覆蓋原始圖像;似乎沒有一種可靠的方式來釋放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是工作,直到我說,我做的圖像副本的異常處理程序。我也嘗試訪問Image和with imageclose()屬性,但沒有成功。

回答

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 2010-06-28 20:13:41