0

我一直在不时地读取二进制数据。但是我从来没有真正让系统了解如何在使用字节数组时推断偏移量。

在这种情况下,我正在处理 dpx 文件并尝试更改位于方向标头中的纵横比。相关文件信息在这里找到:http ://www.fileformat.info/format/dpx/egff.htm

我知道 Scott Griffiths 在这个主题上有一篇很棒的文章。解码图像文件以提取图像标题信息并修改它(使用python) 但是我从来没有真正理解到将这些知识转换为修改 GENERICFILEHEADER 以外的其他标题下的东西

那么如何改变纵横比。任何有关此事的帮助将不胜感激。

干杯

4

1 回答 1

1

有一个非常好的文档,名为“用于数字运动图片交换的文件格式”,我认为它可能会对您有所帮助。我不确定官方版本在哪里,但这里有一个版本。

无论如何,这是一个可用于更改像素纵横比的代码片段:

import struct

fp = open('file.dpx', 'r+b')
fp.seek(1628) #Set the offset to the pixel aspect ratio field

#Prints out the current pixel aspect ratio. 
#Assumes big-endian -- Check the magic number for your use case
print struct.unpack_from('>I', fp.read(4))[0] #horizontal pixel aspect ratio
print struct.unpack_from('>I', fp.read(4))[0] #vertical pixel aspect ratio

#Change the aspect ratios to new values.  Again assumes big-endian
fp.seek(1628) #Return to the proper offset for aspect ratio
new_horizontal = struct.pack('>I', 4L) 
new_vertical = struct.pack('>I', 3L) 
fp.write(new_horizontal) #set the new horizontal pixel aspect ratio to 4
fp.write(new_vertical) #set the new vertical aspect ratio to 3
fp.close()

此代码假定您尚未阅读文件头和图像头。File Header 为 768 字节,Image Header 为 640 字节。然后在AspectRatio之前的Orientation Header中有几个字段:XOffset、YOffset、XCenter、YCenter、XOriginalSize、YOriginalSize、FileName、TimeDate、InputName、InputSN和Border。这些字段的字节长度分别为 4、4、4、4、4、4、100、24、32、32 和 8;总共 220。AspectRatio 的偏移量是这些字段的总和:768+640+220=1628。

这是找出正确偏移量的困难方法。如果您只查看上面列出的 .pdf,会容易得多。它列出了表中的所有字段偏移量:p

于 2012-11-04T03:22:13.423 回答