如何从SWF文件生成PNG图像?

时间:2016-04-25 20:01:05

标签: flash command-line png actionscript-2

我的网站有大约2,000个用于头像生成的SWF文件。时代已经改变,我想离开Flash。我唯一的问题是我必须从这些SWF文件中生成2,000个PNG图像才能够这样做。所以,很自然地,我研究了自动化工具来帮助解决这个问题。

我正在研究swftools并找到了swfrender,它是一个很棒的工具,但它对我的SWF文件没有用。 SWF文件中的对象位于0,0,它就像屏幕上一样:

The object on the stage at x: 0, y: 0

因此,当swfrender呈现图像时,结果如下:

swfrender result

我正在寻找能够提取舞台内容的工具,无论位置如何,都将其输出到PNG图像中。

其他一些细节:

  • SWF文件均为AS1和AS2
  • 某些SWF文件有多个框架
  • SWF内容在每个SWF之间的大小不同,因此有些可能是100px而其他可能是10px

如果可能的话,我希望这是命令行,所以它可以自动完成,并且比我通过每个操作并手动导出它更快。

3 个答案:

答案 0 :(得分:1)

swfrender 做的是渲染 SWF。您可以使用 swfextract 尝试提取对象, swftools 也包含。

来自swftools Wiki

  

提取一切用途......

     

swfextract --outputformat "extract_%06d.%s" -a 1- test.swf

还有一些来自手册页的帮助:

Extract all:

        -a                               Extract all files
        --outputformat "extract_%06d.%s" Filename to use for extraction (printf format)

否则,如果您只想提取某些对象,可以这样做:

  

提取单个项目。首先,运行swfextract file.swf并获取Flash应用程序包含的任何内容。输出如下:

Objects in file file.swf:
[-i] 8 Shapes: ID(s) 2, 5, 7, 9, 11, 13, 15, 17
[-i] 1 MovieClip: ID(s) 18
[-j] 8 JPEGs: ID(s) 1, 4, 6, 8, 10, 12, 14, 16
[-F] 1 Font: ID(s) 3
[-f] 1 Frame: ID(s) 0
  

这些是您可以提取的对象。例如,如果要将第三个jpg(ID = 6)提取到文件file.jpeg,则命令为:

     

swfextract -j 6 file.swf -o file.jpeg

所以,如果你想从每个SWF文件中提取所有内容,而不是混淆所有内容,那么我想到的最佳解决方案就是从每个SWF中提取每一堆文件。您可以通过使用for循环来实现:为每个SWF文件创建一个文件夹,并提取该文件夹中SWF的每个元素。这对以后处理它们很有用。

但是,例如,形状被提取为SWF,您可以渲染它们,或者在渲染之前调整它们的大小。

另一点是,您可能需要调整大小,或在渲染之前移动对象。您可以使用swftools中的其他工具来承担这一责任: swfcombine 。此工具通常用于组合SWF对象,但您可以使用它来移动或调整其上的元素:

−d, −−dummy    Don't require slave objects (for changing movie attributes)

然后你应该能够正确渲染它。

我很抱歉,如果我困惑你,但有很多选择......似乎这取决于具体情况(我不知道这是如何处理不同种类的SWF,如如AS1,AS2等。无论如何,我希望这至少对你有帮助!

答案 1 :(得分:1)

不启动僵尸线程,但是在尝试了Lutarisco建议的swf工具并且无法安装后,我发现https://github.com/jindrapetrik/jpexs-decompiler/releases/tag/version11.2.0

希望这会帮助其他尝试从其swfs中提取图像的人:) 您可以设置背景颜色以清除并选择导出为形状或框架,还可以操纵导出大小以获取更大的图像enter image description here

答案 2 :(得分:-1)

导出>导出图片。从FLASH文件中将其导出到png。除非您使用Windows裁剪工具,否则无法从SWF获取照片。