我怎样在Linux上将swf文件转换为图片文件?我需要能够将其他swf文件加载到该swf中并运行actionscript代码。
在Linux上是否有可能做到这一点?我需要在PHP中完成它,如果必须使用命令行工具也可以。
我怎样在Linux上将swf文件转换为图片文件?我需要能够将其他swf文件加载到该swf中并运行actionscript代码。
在Linux上是否有可能做到这一点?我需要在PHP中完成它,如果必须使用命令行工具也可以。
swfrender
来自swftools,适用于基本的SWF文件。
swfdec-thumbnailer
来自swfdec-gnome,虽然只能获取swf的第一帧,但仍可使用。
要使用swfdec获取swf中的任何帧,请参见以下邮件列表post中的C代码片段。
gnash
来自gnash,也可以工作。使用命令gnash -s<scale-image-factor> --screenshot last --screenshot-file output.png -1 -r1 input.swf
即可获得swf的最后一张图片。
ffmpeg
来自ffmpeg,对某些swf格式也可以工作,使用命令ffmpeg -i movie.swf -f image2 -vcodec png movie%d.png
还可以参见以下指南以获取命令行管道。
为了从php调用外部程序,可以使用exec
命令,具体请参见此处的文档。
请注意,出于安全原因,重要的是要使用另一个命令(如escapeshellcmd
或escapeshellarg
)转义传递给exec
的参数。
一旦你将单帧或全部帧转换为图像格式,就无法运行动作脚本。其他非GNU / Linux工具支持从SWF导出动作脚本。
如果您要导出到PNG的SWF太复杂,其他工具无法处理,则可以使用Flash插件或Gnash和Xvfb以及屏幕捕获软件来捕获SWF的图像帧或像AVI这样的视频格式。然后,您可以从视频格式中提取图像。
此虚拟帧缓冲区方法将支持复杂的SWF文件,但需要很多工作,因为您需要使用Gnash和Xvfb和Screen Capture,或者浏览器,Xvfb和Selenium,如果要捕获SWF与鼠标/键盘交互的某个集合。
带有和不带有虚拟帧缓冲区的Gnash应该在导出之前加载ActionScript,但可能会出现复杂ActionScript的问题。带有虚拟帧缓冲区的Flash插件将在导出之前加载ActionScript。
还请参见以下StackOverFlow问题,这些问题与您的问题重复: