我正在使用Python 2.7
我正在尝试使用一个大型二进制文件来指定图像每个像素的纬度/经度。
使用此代码:open('input', 'rb').read(50)
该文件如下所示:
\x80\x0c\x00\x00\x00\x06\x00\x00.\x18\xca\xe4.\x18\xcc\xe4.\x18\xcf\xe4.\x18\xd1\xe4.\x18\xd3\xe4.\x18\xd5\xe4.\x18\xd7\xe4.\x18\xd9\xe4/\x18\xdb\xe4/\x18\xdd\xe4/\x18
...
该文件的自述文件提供了以下解码信息,但我不确定如何应用它们:
文件采用LSBF字节顺序。文件以2个4字节整数值开头,给出文件的像素和行(x,y)大小。在文件成功后,成对的元素是纬度和经度的2字节整数值乘以100并截断(例如75.324 E是“-7532”)。
感谢您的帮助。
请注意,最终这样做的原因是基于纬度/经度而不是像素#来绘制/改变图像,以防有人想知道。
答案 0 :(得分:0)
通常在处理二进制文件时,您将要使用pack和unpack(https://docs.python.org/2/library/struct.html)函数。这将允许您控制数据的endianess以及数据类型。在您的特定情况下,您可能希望首先阅读标题信息,例如
with open('input', 'rb') as fp:
# read the header bytes to get the number of elements
header_bytes = fp.read(8)
# convert the bytes to two unsigned integers.
x, y = unpack("II", header_bytes)
# Loop through the file getting the rest of the data
# read Y lines of X pixels
...
以上内容实际上并未运行或测试,只是试图让您对方法有一般意义。