BMP - это формат растровых изображений, который Microsoft встроила в Windows; он является частью системы с самых ранних графических версий, а близкий по устройству вариант появился в OS/2 от IBM. Его изначально не проектировали как формат с продвинутым сжатием. BMP очень близок к прямому дампу пикселей, которые программа выводит на экран, обернутому в короткий заголовок с описанием, как их читать. BMP-файлы до сих пор встречаются как значки и ресурсы внутри программ для Windows, как результат простых программ захвата экрана и как промежуточный формат, когда одно приложение передает изображение другому.
Как BMP хранит свое изображение
Почти всегда без сжатия. Файл начинается с небольшого заголовка с двумя буквами BM, размером файла и позицией, где начинаются пиксели, затем следует второй заголовок с описанием самого изображения: ширина, высота, глубина цвета и порядок расположения цветов. После этого идет необязательная палитра, а затем массив пикселей, по одному значению на пиксель, без каких-либо потерь данных.
Есть две особенности, которые часто удивляют. Строки обычно хранятся снизу вверх, поэтому первые пиксели в файле - это нижний левый угол изображения, а каждая строка дополняется до длины, кратной четырем байтам. Глубина цвета варьируется от 1 бита, что означает два цвета, через 4- и 8-битные палитры до 16, 24 и 32 бит полноцветного изображения. Для 4- и 8-битных режимов существует сжатие с кодированием длин серий, но оно редко используется, а 32-битный режим может содержать альфа-канал прозрачности, хотя старое программное обеспечение его часто игнорирует.
Так как ничего не сжимается, размер предсказуем и велик: 24-битный BMP занимает три байта на пиксель независимо от содержимого картинки, поэтому фотография, которая умещается в небольшой JPG, превращается в много мегабайт. Взамен формат чрезвычайно прост для чтения и записи и является без потерь: никакие детали изображения не отбрасываются.
Какие метаданные содержит BMP
Очень мало, и это самое важное, что нужно знать об этом формате. Метаданные - это описательная информация, которую файл хранит о себе, а BMP был создан до того, как это стало важно. В BMP нет EXIF, нет IPTC и нет XMP, поэтому негде хранить модель камеры, имя фотографа, подпись или координаты GPS. В нем нет поля автора, нет заголовка и нет никаких полей даты: единственная дата для BMP - та, которую хранит файловая система, она находится вне файла и меняется при его копировании.
Все, что может показать отчет, берется из заголовков и описывает само изображение, а не его историю:
- Ширина, высота и глубина цвета, а также то, идут ли строки снизу вверх или сверху вниз.
- Метод сжатия, который в обычном случае отсутствует.
- Горизонтальное и вертикальное разрешение, сохраненное в виде пикселей на метр, а не более привычных точек на дюйм.
- Сколько цветов содержит палитра и сколько из них изображение считает важными.
Есть одна настоящая сноска по теме конфиденциальности. Расширенные заголовки могут прикреплять цветовой профиль ICC и позволяют связать его вместо встраивания, сохранив как путь к файлу на компьютере, где изображение было сохранено. Такой путь может раскрыть имя пользователя или структуру чьих-то папок. Это встречается нечасто, но если отчет показывает связанный профиль, это реальная информация о компьютере человека внутри в остальном «немого» файла.
Когда использовать BMP
BMP имеет смысл там, где простота важнее размера: передача изображения в приложение или устройство с минимальным декодером, работа внутри программ для Windows, которые его ожидают, или передача изображения между двумя шагами процесса, где повторное сжатие было бы пустой тратой ресурсов. Поскольку формат без потерь, файл можно многократно пересохранять без ухудшения качества изображения.
Для всего, что вы храните, отправляете или публикуете, PNG - более подходящий вариант. Он тоже без потерь, поэтому пиксели восстанавливаются в точности, но его фильтрация и сжатие обычно уменьшают размер файла до доли исходного, и он может содержать заголовок, автора и цветовой профиль. Для фотографий форматы JPG или WebP будут еще компактнее. Выбирайте BMP осознанно, по технической причине, а не по умолчанию.