如何在Pillow中关闭打开的图像?

76

我有一个导入了Pillow库的Python文件。我可以使用以下代码打开一张图片:

Image.open(test.png)

但我该如何关闭那张图片呢?我并没有使用Pillow对图片进行编辑,只是用它来显示图片并让用户选择保存或删除。

2个回答

139

使用Image.close()方法,你也可以在with块中完成:

with Image.open('test.png') as test_image:
    do_things(test_image)

使用Image.close()的示例:

test = Image.open('test.png')
test.close()

我总是使用第二个选项。上下文管理器非常好用。 - Brobin
@Brobin 哦,是的,使用块是正确的方法。当我不得不使用其他语言时,这也是我最想念的东西之一。 - Morgan Thrapp
1
使用“with”时,我在PIL 1.1.7中遇到了“AttributeError: __exit__”错误,你使用的是哪个版本? - Chris
2
我知道这是一个非常老的帖子,但在我的 Mac 上,.close() 没有任何作用。文件在预览中打开,并在调用 .close() 后保持打开状态。 - Difio

-8
如果您创建了一个 PIL 对象,您会发现它没有 close 方法。
from PIL import Image

img=Image.open("image.jpg")
dir(img)

['_Image__transformer', '_PngImageFile__idat', '__doc__', '__getattr__', '__init__', '__module__', '__repr__', '_copy', '_dump', '_expand', '_makeself', '_new', '_open', 'category', 'convert', 'copy', 'crop', 'decoderconfig', 'decodermaxblock', 'draft', 'filename', 'filter', 'format', 'format_description', 'fp', 'frombytes', 'fromstring', 'getbands', 'getbbox', 'getcolors', 'getdata', 'getextrema', 'getim', 'getpalette', 'getpixel', 'getprojection', 'histogram', 'im', 'info', 'load', 'load_end', 'load_prepare', 'load_read', 'map', 'mode', 'offset', 'palette', 'paste', 'png', 'point', 'putalpha', 'putdata', 'putpalette', 'putpixel', 'quantize', 'readonly', 'resize', 'rotate', 'save', 'seek', 'show', 'size', 'split', 'tell', 'text', 'thumbnail', 'tile', 'tobitmap', 'tobytes', 'tostring', 'transform', 'transpose', 'verify']

有一个地方可以看一下,可以参考文档。我不确定为什么它没有出现在对象的目录中,但它肯定存在。 - Morgan Thrapp
6
我的枕头(2.3.0版本)似乎也缺少关闭方法。 - Roger Huang
我正在使用pkg_resources来检查它的版本:>>> pkg_resources.get_distribution('Pillow').version '2.3.0' - Roger Huang
在我的情况下,我也使用了PGMagick,所以如果你要转换为PDF,请确保不要混淆这两个软件包。 - dev-jeff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接