Как удалить заголовок из файла, который является bmp, но без импорта каких-либо библиотек в python

Как удалить заголовок из файла, который является.bmp, но без импорта каких-либо библиотек в python и чтения байтового байта f.read(1)?

3 ответа

Вы должны искать формат BMP файла и использовать его для определения того, как разбирать заголовок.

В соответствии с этим заголовок начинается следующим образом:

Offset# Size Purpose
0000h 2 bytes the header field used to identify the BMP & DIB file is 0x42 0x4D in hexadecimal, same as BM in ASCII. [...]
0002h 4 bytes the size of the BMP file in bytes
0006h 2 bytes reserved; actual value depends on the application that creates the image
0008h 2 bytes reserved; actual value depends on the application that creates the image
000Ah 4 bytes the offset, i.e. starting address, of the byte where the bitmap image data (pixel array) can be found.

Итак, что вы хотите сделать, это прочитать байты в смещениях 10-13, проанализировать их как 4-байтовое целое, и это целое число представляет, где в файле искать все данные изображения. Затем вам просто нужно прочитать все данные изображения и поместить их в другой файл. Я не уверен, почему вы хотите это сделать, хотя без заголовка будет крайне сложно определить, в каком формате находятся данные изображения.


Используйте шестнадцатеричный редактор, удалите байты файла заголовка и сохраните измененный файл - минус заголовок. Есть также несколько байтов в конце файла Bitmap, чтобы удалить, если вы будете тщательным. Попробуйте шестнадцатеричный редактор XVI32 или HxD. Оба являются очень хорошими шестнадцатеричными редакторами, и они БЕСПЛАТНЫ. Удачи.


BMP не является текстовым файловым форматом, он представляет собой двоичный формат. Это означает, что вы должны прочитать его в двоичном режиме. И вы не можете прочитать его "по строкам", потому что у него нет строк для чтения. Поскольку объект байтов не является изменяемым, вы, вероятно, захотите скопировать его в bytearray для работы. Так:

with open('spam.bmp', 'rb') as f:
 data = bytearray(f.read())

licensed under cc by-sa 3.0 with attribution.