我想知道Python中是否有办法测量PNG图像的内存消耗。
对于我的测试,我对图像normal.png
和evil.png
进行了测试。我们假设两张图片都是100kb。
normal.png
由每像素1个字节表示的数据组成。
evil.png
由\x00
字节和PLTE
组成。块 - 每像素3个字节。
对于normal.png
我可以解压缩IDAT
数据块,测量大小并将其与原始文件大小进行比较,以获得大致的内存消耗。
但是如何继续evil.png
?
答案 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个字节。