我有一个800x800 RGB位图,filesize是2501千字节,并执行以下操作(使用python 3.6):
(遗憾的是我无法分享图片)
from PIL import Image
import numpy as np
im = Image.open('original_image.bmp')
im.save("test_size_manual.bmp", "BMP")
由于某种原因,新文件只有1876 KB。即使文件大小不同,以下内容仍然存在:
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。
造成文件大小差异的原因是什么,或者你将如何找出?
答案 0 :(得分:0)
确实在元数据中找到了答案。 原始图像结果是32位位图,新图像是24位位图。这解释了文件大小的差异:2501 * 3/4略低于1876。 在二进制的偏移量28(0x1c)处存储比特深度,对于原始数据,它是32,对于新图像,它是24。 参考:BMP file format on Wikipedia