Подробный гайд: Как узнать параметры кодирования 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 24— 24 бита на пиксель;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: Проводник
- Нажмите на файл
.bmpправой кнопкой. - Выберите Свойства.
- Перейдите на вкладку Подробно.
- Смотрите поля:
- Битовая глубина / 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-скрипт выше.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.