Если вы хотите просто «скопировать» изображение, единственное, что вы делаете неправильно, это сохранение файла как расширение .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...