有没有办法测量PNG图像的内存消耗?

时间:2015-03-07 10:39:20

标签: python memory png

我想知道Python中是否有办法测量PNG图像的内存消耗。

对于我的测试,我对图像normal.pngevil.png进行了测试。我们假设两张图片都是100kb。

normal.png由每像素1个字节表示的数据组成。

evil.png\x00字节和PLTE组成。块 - 每像素3个字节。

对于normal.png我可以解压缩IDAT数据块,测量大小并将其与原始文件大小进行比较,以获得大致的内存消耗。

但是如何继续evil.png

1 个答案:

答案 0 :(得分:2)

您可以使用Pillow库来识别图像并获取像素数the mode, which can be transformed into the bitdepth

from PIL import Image

mode_to_bpp = {'1':1, 'L':8, 'P':8, 'RGB':24, 'RGBA':32, 
               'CMYK':32, 'YCbCr':24, 'I':32, 'F':32}

i = Image.open('warty-final-ubuntu.png')
h, w = i.size

n_pixels = h * w
bpp = mode_to_bpp[data.mode]
n_bytes = n_pixels * bpp / 8

Image.open尚未加载整个数据;所讨论的压缩图像为3367987字节,4096000像素,未压缩时使用12288000字节的内存;但是strace python脚本显示Image.open只读取内存中文件的4096个字节。