BMP — история формата и стоит ли использовать
Формат BMP от Microsoft: структура, преимущества, недостатки. Почему BMP почти не используется в вебе.
Введение
BMP — один из старейших растровых форматов изображений, тесно связанный с историей операционных систем Windows. Разработанный Microsoft в конце 1980-х годов, формат был долгое время стандартом для хранения графики в Windows и до сих пор поддерживается всеми современными операционными системами. Однако за десятилетия развития веба и мобильных технологий BMP превратился из актуального инструмента в исторический раритет, который упоминается преимущественно в учебниках и ретроспективах.
Что такое BMP формат и почему он почти не используется сегодня? Главное отличие BMP от современных форматов — отсутствие эффективного сжатия. BMP-файл хранит пиксельные данные как есть, что приводит к колоссальным размерам: одна фотография в разрешении 1920×1080 может весить 6 МБ в BMP и 350 КБ в JPG при идентичном визуальном качестве. В эпоху, когда мегабайты трафика стоят денег и замедляют загрузку сайтов, такой расточительность нет места.
В этой статье мы разберём историю BMP, его техническое устройство, сравним с современными форматами и поможем понять, в каких редких случаях BMP всё ещё может быть полезен. Если вы работаете с современным вебом, скорее всего, BMP вам не понадобится — но понимать его особенности стоит, чтобы не столкнуться с ним неожиданно.
История BMP
Формат BMP (Device-Independent Bitmap) был разработан Microsoft в конце 1980-х годов для операционной системы Windows 2.0. Идея заключалась в создании универсального формата хранения растровых изображений, не зависящего от конкретного устройства вывода. До BMP изображения часто хранились в форматах, специфичных для видеокарты или монитора, что создавало проблемы совместимости.
В Windows 3.0 (1990 год) BMP стал основным форматом для хранения обоев рабочего стола, иконок и графики. Вместе с расширением OS/2 (где был свой вариант BMP от IBM) формат закрепился в индустрии. В 1995 году с выходом Windows 95 формат получил поддержку 24-битного цвета (TrueColor), и до появления JPG и PNG в конце 1990-х BMP оставался основным форматом для качественной графики в Windows.
С появлением JPG (1992), PNG (1996), GIF и более поздних форматов BMP начал терять позиции. Веб-разработчики быстро поняли, что размер файлов имеет значение, и перешли на сжимающие форматы. К середине 2000-х BMP стал экзотикой, используемой разве что для совместимости со старым ПО.
Техническое устройство BMP
Структура файла
BMP-файл состоит из четырёх основных частей:
- BMP Header (14 байт) — сигнатура формата, размер файла, смещение к пиксельным данным.
- DIB Header (40+ байт) — информация об изображении: ширина, высота, глубина цвета, метод сжатия, разрешение, цветовая палитра.
- Color Palette (опционально) — таблица цветов для индексированных изображений (1-, 4-, 8-битных).
- Pixel Data — собственно пиксельные данные, обычно без сжатия.
Глубина цвета
BMP поддерживает несколько вариантов глубины цвета:
- 1 бит — чёрно-белое изображение (2 цвета).
- 4 бита — 16 цветов (EGA/VGA-эра).
- 8 бит — 256 цветов с палитрой.
- 16 бит — HighColor (65 536 цветов), редко используется.
- 24 бита — TrueColor (16,7 млн цветов), стандарт для современных BMP.
- 32 бита — TrueColor + Alpha (с прозрачностью), используется редко.
Сжатие
Поддерживается несколько режимов сжатия, но на практике 99% BMP-файлов создаются без сжатия (BI_RGB). Это и есть причина огромных размеров файлов. Доступные методы сжатия:
- BI_RGB — без сжатия. Самый распространённый вариант.
- BI_RLE8 — Run-Length Encoding для 8-битных изображений. Эффективен для графики с большими однотонными областями.
- BI_RLE4 — RLE для 4-битных изображений.
- BI_JPEG, BI_PNG — встроенные JPEG и PNG (появились в Windows 98, почти не используются).
Размер файлов: BMP против других форматов
Чтобы понять масштаб проблемы, сравним размеры одного изображения 1920×1080 в 24-битном цвете:
| Формат | Размер | Отн. BMP | Сжатие |
|---|---|---|---|
| BMP (без сжатия) | 6,2 МБ | 100% | Нет |
| BMP (RLE) | 3–5 МБ | 50–80% | Lossless |
| PNG-24 | 3–5 МБ | 50–80% | Lossless |
| TIFF (LZW) | 2–4 МБ | 40–65% | Lossless |
| JPG (q=85) | 350 КБ | 5–6% | Lossy |
| WebP (q=85) | 250 КБ | 4% | Lossy |
| AVIF (q=60) | 180 КБ | 3% | Lossy |
Как видно, BMP без сжатия в 17 раз тяжелее JPG и в 35 раз тяжелее AVIF. Для веба это катастрофа: один BMP-файл может грузиться дольше, чем вся остальная страница.
Сколько весит BMP: таблица размеров
Вес несжатого BMP считается в уме, по формуле: ширина × высота × байт на пиксель + 54 байта заголовка (14 байт BMP-заголовка и 40 байт DIB-заголовка). Для стандартного 24-битного файла на пиксель приходится 3 байта. Кадр 1000×1000 весит 1000 × 1000 × 3 + 54 = 3 000 054 байта — чуть меньше трёх мегабайт на квадратную картинку. 8-битный кадр (256 цветов) — делите результат на три, плюс 1024 байта на палитру.
Нюанс: каждая строка пикселей дополняется нулями до кратности четырём байтам. Для ширин вроде 1000 или 1920 добавка нулевая, для «неудобных» вроде 999 — до трёх байт на строку.
| Размер кадра | BMP 24-бит (по формуле) | JPG (примерно) | PNG (примерно) |
|---|---|---|---|
| 1000×1000 | 3 000 054 Б ≈ 2,9 МБ | 100–200 КБ | 500–700 КБ |
| 1920×1080 | 6 220 854 Б ≈ 6,2 МБ | 250–500 КБ | 3–5 МБ |
| 4000×3000 | 36 000 054 Б ≈ 36 МБ | 1,5–4 МБ | 10–25 МБ |
Столбец BMP — точная арифметика, от содержимого кадра она не зависит. Диапазоны JPG и PNG — ориентировочные оценки для обычной фотографии: итог зависит от содержимого и выбранного качества. На графике с плоскими заливками PNG сжимается в разы сильнее, чем на фото.
Преимущества BMP
1. Простота
BMP — один из самых простых форматов для чтения и записи. Структура файла тривиальна, не требует сложных алгоритмов декодирования. Это делает его удобным для обучения программированию графики и для встраиваемых систем с минимальными ресурсами.
2. Универсальная поддержка
BMP открывается практически в любой программе на любой операционной системе. Windows, macOS, Linux, мобильные ОС — все поддерживают BMP «из коробки». Это важно для совместимости со старым ПО.
3. Отсутствие потерь
BMP без сжатия хранит пиксели как есть, без какой-либо потери качества. Каждый пиксель восстановится точно при открытии. Это полезно для задач, где критична точность: научные изображения, документальная графика.
4. Быстрая загрузка
Без сжатия файл читается «как есть» в память, без вычислений. Для встроенных систем с медленным CPU это может быть преимуществом: проще прочитать 6 МБ, чем декодировать сложный алгоритм.
Недостатки BMP
1. Огромный размер файлов
Главный недостаток. BMP без сжатия неэффективно использует пространство в 5–20 раз по сравнению со сжатыми форматами. Это делает его непригодным для веба, мобильных приложений, облачных хранилищ.
2. Нет поддержки прозрачности (в большинстве реализаций)
Хотя формат технически поддерживает 32-битный режим с альфа-каналом, на практике большинство программ создаёт 24-битные BMP без прозрачности. Это серьёзное ограничение для современного веба.
3. Нет поддержки анимации
BMP — статичный формат. Для анимации нужны другие форматы: GIF, APNG, анимированный WebP.
4. Нет поддержки в браузерах (практически)
Технически браузеры могут показывать BMP, но на практике это редкость. BMP не входит в стандартный набор форматов для веба, и большинство веб-разработчиков его не используют.
5. Нет поддержки метаданных
BMP не поддерживает EXIF, IPTC, XMP. Это делает его непригодным для фотографий, где важна информация о камере, настройках, геолокации.
6. Ограниченная цветовая глубина
BMP не поддерживает 16-битный цвет на канал (как TIFF или PSD), что ограничивает его применение в профессиональной фотографии.
Когда BMP ещё может быть полезен
Несмотря на все недостатки, у BMP остаются узкие ниши:
- Обучение программированию. Простой формат, удобный для изучения основ работы с изображениями.
- Встроенные системы. Микроконтроллеры, IoT-устройства, где нет ресурсов на декодирование сложных форматов.
- Совместимость со старым ПО. Иногда единственный формат, который принимает старая программа.
- Системные иконки Windows. Некоторые системные иконки Windows до сих пор используют BMP-подобные форматы.
- Скриншоты в специализированных задачах. Быстрый захват экрана без сжатия, когда важна скорость, а не размер.
Во всех остальных случаях — а это 99% реальных задач — лучше использовать современные форматы.
Когда BMP до сих пор нужен, а когда — нет
На практике BMP до сих пор легитимно живёт там, где сжатие запрещено или нечем делать. ПО промышленных и медицинских сканеров часто сохраняет сырые кадры именно в BMP: устройству проще выгрузить массив пикселей, чем кодировать JPEG. Отдельные регламенты и ТЗ прямо требуют «хранить данные без сжатия» — выбор тогда обычно между BMP и TIFF. В прошивках микроконтроллеров декодер JPEG может не влезть в память, когда читатель BMP — пара десятков строк кода.
| Ситуация | Брать BMP? | Чем заменить |
|---|---|---|
| Фото для сайта, соцсетей, мессенджеров | Нет | JPG или WebP |
| Вложение в письмо | Нет | JPG; если важно качество — PNG в ZIP |
| Скан документа для архива | Нет | PDF для отправки, TIFF для хранения |
| Кадр с медицинского или промышленного сканера | Да, если требует ПО | TIFF — если ПО его принимает |
| Требование ТЗ «без сжатия» | Да | TIFF lossless, если регламент не запрещает |
| Прошивка с готовым BMP-декодером | Да | Сырой дамп пикселей без заголовка |
| Обои на компьютере без интернета | Можно | PNG — тот же результат вдвое меньше |
Конвертация BMP
Если у вас есть BMP-файлы и нужно использовать их в вебе или современных приложениях, их следует конвертировать. Самый универсальный вариант — конвертация в PNG: BMP в PNG сохранит пиксели без потерь и уменьшит размер в 2–5 раз. Обратная операция — PNG в BMP — может понадобиться для совместимости со старым ПО.
Для фотографий лучше конвертировать BMP в JPG, WebP или AVIF. Это даст уменьшение размера в 10–30 раз при визуально идентичном качестве. При конвертации BMP в JPG выбирайте качество 85 — этого достаточно для большинства задач.
Современные альтернативы BMP
PNG
Прямой наследник BMP для lossless-сценариев. Поддерживает сжатие без потерь, прозрачность, 16-битный цвет. Размер файла в 2–5 раз меньше BMP. Универсально поддерживается в вебе и ПО.
WebP lossless
Современная альтернатива PNG. Lossless-сжатие на 20–25% эффективнее PNG. Поддерживается во всех современных браузерах.
AVIF lossless
Самый эффективный lossless-формат на сегодня. На 40–50% меньше PNG. Поддержка браузерами — около 93%.
TIFF
Для профессиональной фотографии и печати. Поддерживает 16-битный цвет, CMYK, ICC-профили, multi-page. Сжатие LZW даёт уменьшение в 1,5–2 раза.
BMP и SEO
Использование BMP на сайте — гарантированное убийство производительности и позиций в поиске. Яндекс и Google учитывают скорость загрузки как фактор ранжирования, и BMP-файлы могут увеличить время загрузки страницы в десятки раз. Поисковые боты также могут игнорировать BMP-изображения при индексации, потому что не всегда распознают их как веб-совместимые.
Если на вашем сайте есть BMP-файлы, замените их как можно скорее. Это даст мгновенный прирост скорости и может улучшить позиции в выдаче.
Как избежать BMP в workflow
Большинство программ по умолчанию не создают BMP, но некоторые старые утилиты (Paint в старых версиях Windows, некоторые сканеры) могут сохранять в BMP. Чтобы избежать этого:
- Используйте современные редакторы: Photoshop, GIMP, Affinity Photo.
- При сканировании выбирайте PNG или TIFF вместо BMP.
- В скриптах и автоматизации явно указывайте целевой формат.
- Регулярно проверяйте сайт на наличие BMP-файлов.
Частые вопросы
BMP — что это за формат простыми словами?
Это картинка, сохранённая «как есть»: каждая точка записана своими тремя байтами цвета, без упаковки. Похоже на чемодан, где вещи лежат насыпью, а не скручены: достаётся мгновенно, места занимает в разы больше. Формат придумала Microsoft для Windows в конце 1980-х, открывается он до сих пор почти везде.
Почему BMP-файлы такие большие?
Потому что сжатия нет совсем. Кадр 1920×1080 — это около двух миллионов пикселей по 3 байта каждый: 6,2 МБ, даже если половина кадра — однотонное небо. JPG находит повторяющиеся участки, выбрасывает незаметные глазу детали и укладывается в 300–500 КБ.
Чем открыть BMP на телефоне?
Обычной галереей. Android открывает BMP штатно — подойдут Google Фото или любой сторонний просмотрщик. На iPhone картинка откроется в «Фото», но при редактировании или отправке система может пересохранить её в HEIC или JPG. Чтобы привести BMP к привычному формату, проще всего браузерный конвертер BMP в PNG.
Заключение
BMP — исторический формат, который сыграл важную роль в развитии цифровой графики, но сегодня почти не используется в реальных проектах. Его главные недостатки — отсутствие эффективного сжатия, огромные размеры файлов, отсутствие поддержки прозрачности и метаданных — делают его непригодным для современного веба.
Стоит ли использовать BMP сегодня? В 99% случаев — нет. Современные форматы (PNG, WebP, AVIF, JPG) превосходят BMP по всем параметрам: размеру, скорости загрузки, поддержке функций. BMP имеет смысл только в узких нишах: обучение программированию, встроенные системы, совместимость со старым ПО.
Если у вас есть BMP-файлы, сконвертируйте их в современные форматы. Конвертер BMP в PNG — самый простой способ перевести файлы без потерь, а PNG в BMP поможет в редких случаях обратной совместимости. Переход с BMP на современные форматы — это инвестиция в скорость вашего сайта, комфорт пользователей и позиции в Яндексе.
Попробуйте эти инструменты
Похожие статьи
JPG vs PNG — в чём разница и что выбрать
Подробное сравнение форматов JPG и PNG: сжатие, прозрачность, качество, размер файла. Когда использовать JPG, а когда PNG — с примерами.
WebP — формат будущего: преимущества и недостатки
Полный гид по формату WebP от Google. Насколько он меньше JPG и PNG, какие браузеры поддерживают, стоит ли переходить.
Как сжать изображение без потери качества
Практическое руководство по сжатию изображений. Разница между lossless и lossy, лучшие настройки для веба, инструменты.
SVG vs PNG — что выбрать для веб-графики
Сравнение векторного SVG и растрового PNG. Масштабируемость, размер, когда использовать каждый формат.