Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python获取Swf文件维度的最佳方法_Python_Actionscript 3_Debugging_Flash - Fatal编程技术网

使用Python获取Swf文件维度的最佳方法

使用Python获取Swf文件维度的最佳方法,python,actionscript-3,debugging,flash,Python,Actionscript 3,Debugging,Flash,编辑: 我在考虑六边形和swfTools。有人有其他解决方案或见解吗? 编辑: 新问题-如何解决此错误: 我尝试使用hexagonit.swfheader,但收到错误: f = 'out/'+w+"/"+s+"/"+"theSwf/"+s data = hexagonit.swfheader.parse(f) File "/Library/Python/2.7/site-packages/hexagonit/swfheader/__init__.py", line 26, in parse

编辑:

我在考虑六边形和swfTools。有人有其他解决方案或见解吗? 编辑:

新问题-如何解决此错误: 我尝试使用hexagonit.swfheader,但收到错误:

 f = 'out/'+w+"/"+s+"/"+"theSwf/"+s
 data = hexagonit.swfheader.parse(f)
 File "/Library/Python/2.7/site-packages/hexagonit/swfheader/__init__.py", line 26, in parse
 signature = ''.join(struct.unpack('<3c', input.read(3)))  
 struct.error: unpack requires a string argument of length 3
*发生错误的地方。 我读到:

我也尝试过使用PIL和枕头,但我觉得他们比较的是图像而不是swf文件。我反编译了swf文件,我一直在看,但也有swf文件本身

我想知道文件显示的大小(尺寸)

我的第一个想法是尝试使用图像大小比较

我的问题是,在swf中用作资产的一些图像实际上比swf本身大,否则我将使用PIL简单地获取最大图像资产的尺寸(背景除外)

其次,我的另一个问题是,可以同样地比较svg和png文件。。据我所知,枕头和Pil不处理svg文件

我的第二个想法是在actionscript代码中搜索维度

有些文件的动作脚本中有300x300之类的东西,表示大小。不幸的是,在查看了我正在处理的大多数文件后,我发现它们并没有这样做,这意味着这在很大程度上是没有帮助的

我的第三个想法是忽略反编译的swf数据,而是关注swf本身

理论上,我可以试着在字节码中找到尺寸(或者使用一个这样做的库(我需要找到一个,因为pip和pillow似乎不起作用)),或者我需要运行广告,然后截图,试着找到广告开始和停止的位置,并基于此计算像素。我对屏幕拍摄的问题是,图像可能会混入背景,如果不是不可能的话,也很难获得正确的尺寸,但更重要的是,如果没有在正确的url中播放,许多主权财富基金由于安全原因无法播放,等等


因此,我左右为难。我认为最好的方法是使用swf文件本身

看看这位官员。您要查找的维度信息应位于文件开头附近。请看“SWF标题”一节


哦,谢谢,我来看看。你认为有什么方法可以让我轻松地查询,或者我需要以字节码手动查看每个文件吗?我知道除了字节码,我不能以任何形式打开文件。我不知道如何轻松地将其解释为大小。但是谢谢你,我会深入了解文件格式,看看是否有什么见解这是一种二进制格式,所以是的,你需要做一些字节偏移量计算,以准确地找到数据存储的位置-但这是一个非常好的练习,信息就在文件的开头,所以这应该不会太难。那么到底是什么阻止了你使用它呢?我真的看不出你的问题与你链接的问题有什么不同。我无法让swfheader工作,因此我试图找到另一个解决方案。那么你应该提出你的问题,问你有什么问题,包括错误消息、堆栈跟踪等。只是尝试了一下,在这里效果很好。好的,我在问题中添加了我的错误。我只是在寻找一个解决办法。但我认为一个变通方法同样有用。只要按照他们在网站上展示的方式来尝试就可以了
metadata=hexagonit.swfheader.parse(TEST_-SWF)
其中TEST_-SWF是实际的SWF文件名,即
Flash_-Gallery.SWF
(只是为了测试:没有使用文件夹路径,所以将所有文件保存在同一目录中,以便在没有路径斜杠的情况下进行访问)或者使用指向您的TEST_-SWF的http链接。如果这样做有效,那么至少您知道问题出在
f=open('out/'+w+“/”+s+“/“+”theSwf/“+s,'r')
。parse()需要一个文件url和f=open。。不返回url,而是提供文件字节(对于@Martin之前建议的内容,顺便说一句,您需要第9个字节)
def parse(input):
"""Parses the header information from an SWF file."""
need_close=False
if hasattr(input, 'read'):
    input.seek(0)
else:
    input = open(input, 'rb')*
    need_close=True
The FrameSize field defines the width and height of the on-screen display. This field is stored as a RECT 
structure, meaning that its size may vary according to the number of bits needed to encode the coordinates. The 
FrameSize RECT always has Xmin and Ymin value of 0; the Xmax and Ymax members define the width and height 
(see Using bit values).