有一个非常好的文档,名为“用于数字运动图片交换的文件格式”,我认为它可能会对您有所帮助。我不确定官方版本在哪里,但这里有一个版本。
无论如何,这是一个可用于更改像素纵横比的代码片段:
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