Подробный гайд: Как узнать параметры кодирования BMP

Как узнать параметры кодирования BMP: битность, сжатие, заголовок, палитру. Обзор инструментов: file, ImageMagick, ExifTool, PowerShell, Python.

2026.09.20                  


Подробный гайд: Как узнать параметры кодирования BMPПодробный гайд: Как узнать параметры кодирования BMP

Важно:

У файла .bmp нет текстовой кодировки вроде UTF-8, Windows-1251 и т.п. BMP — это растровое изображение, поэтому смотрят не «кодировку», а параметры кодирования пикселей: битность, тип сжатия, версию заголовка, палитру, цветовое пространство.


1. Быстро: команда file (Linux/macOS/WSL/Git Bash)

file image.bmp
file -i image.bmp

Пример вывода:

image.bmp: PC bitmap, Windows 3.x format, 1920 x 1080 x 24, image size 6220800
image.bmp: image/bmp; charset=binary


Расшифровка:

  • 1920 x 1080 — размер;
  • x 2424 бита на пиксель;
  • charset=binary — это бинарный файл, не текст.

2. ImageMagick: подробная информация

Установка:

  • Linux: sudo apt install imagemagick
  • macOS: brew install imagemagick
  • Windows: скачать ImageMagick.

Команды:

identify -verbose image.bmp

Или кратко:

identify -format "%m %w x %h, depth=%z, colorspace=%[colorspace], type=%[type], compression=%C\n" image.bmp

Пример:

BMP 1920 x 1080, depth=8, colorspace=sRGB, type=Palette, compression=None

Что смотреть:

  • depth — глубина цвета;
  • colorspace — цветовое пространство;
  • type — тип изображения: Palette, TrueColor, Grayscale и т.д.;
  • compression — сжатие: None, RLE и т.д.

3. ExifTool: удобно для метаданных BMP

Установка:

  • Windows: choco install exiftool
  • macOS: brew install exiftool
  • Linux: sudo apt install libimage-exiftool-perl

Команды:

exiftool image.bmp

Только нужные поля:

exiftool -BMPVersion -ImageWidth -ImageHeight -BitsPerPixel -Compression -NumColors image.bmp

Пример:

BMP Version                 : Windows V3
Image Width                 : 1920
Image Height                : 1080
Bits Per Pixel              : 24
Compression                 : None

4. Windows: Проводник

  1. Нажмите на файл .bmp правой кнопкой.
  2. Выберите Свойства.
  3. Перейдите на вкладку Подробно.
  4. Смотрите поля:
    • Битовая глубина / Bit depth;
    • Сжатие / Compression;
    • Размеры / Dimensions;
    • Цветовое представление / Color representation.

Но Windows показывает не всё. Для точных данных лучше PowerShell или ExifTool.


5. Windows PowerShell: через System.Drawing

Add-Type -AssemblyName System.Drawing

$img = [System.Drawing.Bitmap]::FromFile("C:\temp\image.bmp")
$img.PixelFormat
$img.Width
$img.Height
$img.Dispose()

Пример вывода:

Format24bppRgb
1920
1080

Format24bppRgb означает 24 бита на пиксель, RGB.

Бывают:

Format8bppIndexed, Format32bppArgb, Format16bppRgb565 и т.д.


Минус: PowerShell так не покажет тип сжатия BMP напрямую.


6. Hex-редактор / xxd: смотрим заголовок вручную

Linux/macOS/WSL:

xxd -l 64 -g 1 image.bmp

Или:

hexdump -C -n 64 image.bmp

Первые байты BMP:

42 4D ... 

42 4D — это сигнатура BM.

Основные смещения для стандартного BITMAPINFOHEADER:

Смещение Размер Что означает
0x00 2 Сигнатура: 42 4D = BM
0x0A 4 Смещение до пиксельных данных
0x0E 4 Размер DIB-заголовка
0x12 4 Ширина
0x16 4 Высота
0x1A 2 Число плоскостей
0x1C 2 Бит на пиксель, bpp
0x1E 4 Тип сжатия

Все многобайтовые числа в BMP обычно хранятся little-endian.


7. Python: точный разбор заголовка

import struct

with open("image.bmp", "rb") as f:
    h = f.read(54)

if h[:2] != b"BM":
    print("Это не BMP")
else:
    size, r1, r2, offset = struct.unpack("<IHHI", h[2:14])
    dib = struct.unpack("<I", h[14:18])[0]

    print("DIB header size:", dib)
    print("Pixel data offset:", offset)

    if dib == 12:
        w, hgt = struct.unpack("<HH", h[18:22])
        planes, bpp = struct.unpack("<HH", h[22:26])
        comp = 0
    elif dib >= 40:
        w, hgt = struct.unpack("<ii", h[18:26])
        planes, bpp = struct.unpack("<HH", h[26:30])
        comp = struct.unpack("<I", h[30:34])[0]
    else:
        raise SystemExit("Неизвестный DIB header")

    comp_map = {
        0: "BI_RGB — без сжатия",
        1: "BI_RLE8",
        2: "BI_RLE4",
        3: "BI_BITFIELDS",
        4: "BI_JPEG",
        5: "BI_PNG",
        6: "BI_ALPHABITFIELDS",
    }

    print(f"Размер: {w}x{hgt}")
    print(f"Бит на пиксель: {bpp}")
    print(f"Сжатие: {comp_map.get(comp, comp)}")


Пример вывода:

DIB header size: 40
Pixel data offset: 54
Размер: 1920x1080
Бит на пиксель: 24
Сжатие: BI_RGB — без сжатия

8. Как читать основные значения BMP

Бит на пиксель, bpp

  • 1 — 2 цвета, палитра;
  • 4 — 16 цветов, палитра;
  • 8 — 256 цветов, палитра;
  • 16 — High Color;
  • 24 — True Color, обычно RGB;
  • 32 — True Color + альфа-канал.

Тип сжатия

  • 0 — BI_RGB, без сжатия;
  • 1 — BI_RLE8;
  • 2 — BI_RLE4;
  • 3 — BI_BITFIELDS;
  • 4 — BI_JPEG;
  • 5 — BI_PNG;
  • 6 — BI_ALPHABITFIELDS.

Размер DIB-заголовка

  • 12 — BITMAPCOREHEADER, старый OS/2;
  • 40 — BITMAPINFOHEADER;
  • 52, 56 — BITMAPV2/V3;
  • 108 — BITMAPV4HEADER;
  • 124 — BITMAPV5HEADER.

9. Если вы имели в виду текстовую кодировку

Если файл называется .bmp, но внутри текст, то это не BMP.

Тогда смотрите так:

file -i file.bmp
uchardet file.bmp

В Windows:

  • откройте в Notepad++;
  • меню Encoding / Кодировка;
  • или используйте file -i в WSL/Git Bash.

Но нормальный .bmp — это бинарный файл, у него текстовой кодировки нет.


Что выбрать

  • Нужно быстро: file image.bmp
  • Нужно подробно: identify -verbose image.bmp
  • Нужны метаданные: exiftool image.bmp
  • Windows без программ: Свойства → Подробно
  • Точный разбор: hex-редактор или Python-скрипт выше.

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта