我试图在不使用python图像处理库的情况下读取bmp图像,并将图像数据写入文件。
这是我的代码:
f = open('test7.bmp', 'rb')
data = f.read()
f.close()
f = open('Image_details.txt', 'wb')
f.write(data)
f.close()
但是我得到的图像数据是这样的:
BMÞ6(¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
你能帮助我以任何其他格式(十六进制/二进制/十进制)获取图像数据吗?
提前感谢。
答案 0 :(得分:2)
如果您只想“复制”图像,那么您唯一错误的做法是将文件保存为.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...