2010-06-28 33 views
8

Tôi đang cố gắng chụp một tệp hình ảnh, thực hiện một số nội dung và lưu lại các thay đổi về tệp gốc. Vấn đề tôi đang gặp là ghi đè hình ảnh gốc; dường như không có cách nào đáng tin cậy để giải phóng tay cầm trên filename.Làm thế nào để đóng một hình ảnh?

Tôi cần nội dung này được lưu lại vào cùng một tệp vì các quy trình bên ngoài phụ thuộc vào tên tệp đó để giữ nguyên.

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 đang hoạt động cho đến khi tôi thêm trình xử lý ngoại lệ nơi tôi tạo bản sao của hình ảnh. Tôi cũng đã thử truy cập thuộc tính close() của Hình ảnh và with image, không thành công.

Trả lời

16

Bạn có thể cung cấp đối tượng giống như tệp thay vì tên tệp thành hàm Image.open. Vì vậy, hãy thử điều này:

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

Vì vậy, gần tôi đã có thể ngửi thấy nó. – Chris

Các vấn đề liên quan