打开某些png文件后,为什么PIL不释放内存?

时间:2015-05-23 10:08:20

标签: python image png python-imaging-library

假设我有一项服务,可以从网络上获取图像,并将它们保存到目录中。我正在输入.png文件并在本地保存它们。我使用PIL打开图像,并在需要时添加背景。我最近注意到在处理一些.png文件时会发生高内存使用。似乎在打开一些.png时,PIL没有正确释放内存。

以下代码将演示会发生什么:

from PIL import Image
import resource

def check_mem(filename):
    mem = lambda:resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    print mem()
    img = Image.open(filename)
    print mem()
    img = img.convert('RGBA')
    print mem()
    background = Image.new("RGBA", img.size, (255, 255, 255))
    print mem()
    image = background.paste(img, img)
    print mem()
    del background
    del img
    del image
    print mem()

if __name__ == "__main__":
    import sys
    check_mem(sys.argv[1])

对于某些图像(例如图像like this one),会生成以下输出:

12416
12416
22508
22508
22508
22508

你可以看到使用的内存几乎翻了一倍!即使在最后删除所有对象时,内存仍然是开头时的两倍。

对于其他图片,example this one内存使用情况不会改变:

12416
12416
12416
12416
12416
12416

有谁知道为什么会这样?有什么方法可以避免这种情况吗?

0 个答案:

没有答案
相关问题