如何关闭一张图片?

8 投票
1 回答
18243 浏览
提问于 2025-04-16 00:32

我正在尝试处理一个图片文件,做一些修改后再把这些改动保存回原来的文件。不过,我遇到的问题是,无法成功覆盖原始图片;似乎没有可靠的方法来释放对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的close()属性和使用with image,但都没有成功。

1 个回答

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

撰写回答