Формат файла BMP
BMP пишет пиксели на диск практически без обработки. Отсюда его огромный размер и предельная лёгкость чтения — причина, по которой он до сих пор встречается внутри софта под Windows.
или перетащите их сюда · изображения, видео, аудио и документы · до 2 ГБ
Что такое BMP?
BMP — родной растровый формат Windows, появившийся в 1987 году. Файл состоит из короткого заголовка и следом сырых значений пикселей, строка за строкой, в обычном случае вообще без сжатия. Фотография 1920×1080 в 24-битном цвете занимает около 6 МБ независимо от того, детализированный это пейзаж или сплошной белый прямоугольник: заметить, что второй случай состоит из повторов, формату нечем.
Две особенности регулярно ставят людей в тупик. Строки хранятся снизу вверх, поэтому наивный читатель, полагающий порядок сверху вниз, получает изображение, перевёрнутое по вертикали. И каждая строка дополняется до кратности четырём байтам, поэтому 24-битная картинка шириной в 3 пикселя занимает 12 байт на строку вместо 9. И то и другое — следствие того, что формат проектировали под способ, которым Windows переносила растры в видеопамять.
Именно эта простота и не даёт BMP исчезнуть. Чтобы прочитать такой файл, хватает пары десятков строк кода без всякой библиотеки, что удобно встраиваемым системам, тестовым стендам, конвейерам скриншотов и промежуточным шагам между инструментами. Как формат доставки он не имеет смысла вовсе: PNG хранит те же самые пиксели без потерь и в разы компактнее.
| Расширение | .bmp |
|---|---|
| Категория | Изображение |
| MIME-тип | image/bmp |
| Год появления | 1987 |
| Разработчик | Microsoft |
| Сжатие | Нет (без сжатия) |
| Прозрачность | Да |
| Анимация | Нет |
BMP: частые вопросы
- Почему файлы BMP такие большие?
- Потому что обычно они несжаты: каждый пиксель записывается буквально, и размер прямо следует из ширины, умноженной на высоту и на число байт на пиксель. Конвертация в PNG даёт побайтово те же пиксели при размере обычно в четыре-десять раз меньше и вообще без ущерба качеству.
- BMP работает без потерь?
- Да. Стандартный BMP хранит сырые значения пикселей без всякого приближения, поэтому ничего не отбрасывается. Он без потерь ровно в том же смысле, что и PNG, только без сжатия — поэтому конвертация BMP в PNG является чистым выигрышем, а в JPEG нет.
- Поддерживает ли BMP прозрачность?
- У 32-битного BMP есть четвёртый байт на пиксель, способный работать альфа-каналом, но поддержка неровная: многие просмотрщики его игнорируют и рисуют изображение непрозрачным. Если прозрачность важна, берите PNG, где альфа входит в спецификацию и учитывается повсеместно.
- Почему мой BMP перевёрнут?
- Потому что BMP хранит строки снизу вверх, в отличие почти от всех остальных форматов. Читатель, полагающий порядок сверху вниз, выдаёт зеркальную по вертикали картинку. Заголовок может объявить отрицательную высоту как признак прямого порядка — одни программы так и пишут, другие это неверно разбирают.
- Когда BMP всё ещё уместен?
- Когда файл должен читаться минимумом кода и без библиотек: встраиваемые устройства, простые тестовые обвязки, промежуточный шаг между двумя инструментами, которые оба его понимают. Для хранения, обмена и веба нет ни одного случая, где BMP выигрывает у PNG или JPEG.
- Теряется ли качество при конвертации BMP в PNG?
- Нет. Сжатие PNG работает без потерь, поэтому каждый пиксель сохраняется в точности и меняется только размер файла. Позже можно конвертировать обратно в BMP и получить идентичное изображение — поэтому PNG строго лучший способ хранить те же данные.