BMP це формат растрових зображень, який Microsoft вбудував у Windows, і він є в системі ще з перших графічних версій; близький варіант зʼявився в IBM OS/2. Ідея ніколи не полягала в розумному стисненні. 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, яке його очікує, або передати зображення між двома кроками процесу, де повторне стиснення було б марною витратою ресурсів. Оскільки він без втрат, BMP також безпечно багаторазово зберігати без погіршення якості зображення.
Для всього, що ви зберігаєте, надсилаєте чи публікуєте, краще підійде PNG. Він теж без втрат, тож пікселі відновлюються ідентично, але завдяки фільтрації та стисненню розмір файлу зазвичай зменшується до частки початкового, і формат може містити назву, автора та профіль кольору. Для фотографій JPG або WebP будуть ще меншими. Обирайте BMP свідомо, з технічної причини, а не як значення за замовчуванням.