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

时间:2014-06-17 20:33:39

标签: 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
 signature = ''.join(struct.unpack('<3c', input.read(3)))  
 struct.error: unpack requires a string argument of length 3

在追踪到此后,我发现错误发生在这里:

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

*是发生错误的地方。

我看了:Get dimensions from a flash file (.swf) in pure-Python

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

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

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

  

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

     

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

我的第二个想法是搜索尺寸的动作代码。

  

某些文件的动作脚本中有300x300表示大小。不幸的是,在查看我正在使用的大多数文件后,这并不意味着这在很大程度上是无益的。

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

  

理论上我可以尝试在字节代码中找到维度(或使用一个执行此操作的库(我需要找到一个作为pip和枕头似乎不起作用))或者我需要运行广告然后截图并尝试查找广告的开始和停止位置,并根据该值计算像素。屏幕拍摄的问题在于图像可能会混合到背景中并使其变得困难(如果不是不可能)以获得正确的尺寸,但更重要的是,如果没有在正确的URL中播放,许多swfs由于安全性而无法播放,等等。

因此,我陷入两难境地。我认为最好的方法是使用swf文件本身。

1 个答案:

答案 0 :(得分:0)

查看官方SWF file format spec。您要查找的尺寸信息应该在文件的开头附近。请查看“SWF标题”部分

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).