编辑:
我正在考虑六角形和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文件本身。
答案 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).