Открытие и сохранение растровых изображений с помощью python влияет на размер файла - PullRequest
0 голосов
/ 04 июня 2018

У меня есть растровое изображение RGB 800x800, размер файла составляет 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 кб.И хотя размер файла различен, справедливо следующее:

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, найденной на изображениях Google, у большинства был тот же размер файла, что и у нового изображения, 1876 КБ, но также была по крайней мере одна, у которой был тот же размер файла, что и у исходного изображения, 2501 КБ.
В чем причина такой разницы в размерах файлов или как вы узнаете?

1 Ответ

0 голосов
/ 04 июня 2018

Ответ действительно находится в метаданных.Исходное изображение оказывается 32-битным, а новое - 24-битным.Это объясняет разницу в размере файла: 2501 * 3/4 ​​чуть меньше 1876. По смещению 28 (0x1c) двоичного файла сохраняется битовая глубина, для оригинала она равнялась 32, а для нового изображения - 24 *.1001 * Ссылка: Формат файла BMP в Википедии

...