Написание изображения на Python без использования библиотек - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь прочитать изображение BMP без использования библиотек обработки изображений Python и записать данные изображения в файл.

Вот мой код:

f = open('test7.bmp', 'rb')
data = f.read()
f.close()

f = open('Image_details.txt', 'wb')
f.write(data)
f.close()

Но я получаю данные изображения вот так:

БМÞ 6

Не могли бы вы помочь мне получить данные изображения в любом другом формате (шестнадцатеричном / двоичном / десятичном)?

спасибо заранее.

1 Ответ

0 голосов
/ 17 мая 2018

Если вы хотите просто «скопировать» изображение, единственное, что вы делаете неправильно, это сохранение файла как расширение .txt - ваша система, вероятно, пытается открыть его как текстовый файл, и таким образом вытекстовый редактор показывает вам двоичные данные, как это.Если вы измените расширение на .bmp, оно откроется как обычное изображение.

Если вы хотите, однако, вывести текстовое шестнадцатеричное представление изображения в текстовый файл, вы можете использоватьмодуль binascii (часть стандартной библиотеки):

import binascii

with open('img.bmp', 'rb') as fd:
    data = fd.read()

with open('img_data.txt', 'w') as fd:
    fd.write(binascii.hexlify(data))

Это даст вам однострочный текстовый файл с шестнадцатеричным представлением внутри него, например:

424d7ab80b0000000000...

Если вы хотите аккуратно отформатированное шестнадцатеричное представление (например, пробел через каждые 2 символа и символ новой строки через каждую 10-ю пару), вы можете сделать:

import binascii

with open('img.bmp', 'rb') as fd:
    data = fd.read()

with open('img_data.txt', 'w') as fd:
    hex_str = binascii.hexlify(data)
    chunk_size = 10
    hex_list = [hex_str[i:i+2] for i in range(0, len(hex_str), 2)]
    hex_chunks = [hex_list[i:i + chunk_size] for i in range(0, len(hex_list), chunk_size)]
    data = '\n'.join([' '.join(chunk) for chunk in hex_chunks])
    fd.write(data)

, что даст вам красиво отформатированный (легче для чтения, но большепо размеру) текстовое представление:

42 4d 7a b8 0b 00 00 00 00 00
7a 00 00 00 6c 00 00 00 80 02
00 00 90 01 00 00 01 00 18...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...