使用python打开和保存位图图像会影响文件大小

使用python打开和保存位图图像会影响文件大小,python,image,bitmap,file-format,Python,Image,Bitmap,File Format,我有一个800x800 RGB位图,文件大小为2501 KB,并执行以下操作(使用python 3.6): (遗憾的是,我无法共享该图像) 由于某种原因,新文件只有1876KB。即使文件大小不同,以下内容仍然适用: import matplotlib.pylab as plt original_image = plt.imread('original_image.bmp') test_size_image = plt.imread('test_size_manual.bmp') assert

我有一个800x800 RGB位图,文件大小为2501 KB,并执行以下操作(使用python 3.6):
(遗憾的是,我无法共享该图像)

由于某种原因,新文件只有1876KB。即使文件大小不同,以下内容仍然适用:

import matplotlib.pylab as plt

original_image  = plt.imread('original_image.bmp')
test_size_image = plt.imread('test_size_manual.bmp')
assert (original_image == test_size_image).all()
这意味着像素对像素的结果numpy.ndarray是相同的。从谷歌图像上发现的800x800 bmp的“随机”抽样中,大多数与新图像的文件大小相同,为1876 KB,但至少有一个与原始图像的文件大小相同,为2501 KB。

是什么导致了文件大小的差异,或者您将如何找到答案?

答案确实可以在元数据中找到。 原来的图像是32位位图,而新图像是24位位图。这解释了文件大小的差异:2501*3/4略低于1876。 在二进制的偏移量28(0x1c)处,存储位深度,原始图像为32,新图像为24。
参考:

元数据?:
import matplotlib.pylab as plt

original_image  = plt.imread('original_image.bmp')
test_size_image = plt.imread('test_size_manual.bmp')
assert (original_image == test_size_image).all()