将swf渲染为png或其他图像格式

9

我怎样在Linux上将swf文件转换为图片文件?我需要能够将其他swf文件加载到该swf中并运行actionscript代码。

在Linux上是否有可能做到这一点?我需要在PHP中完成它,如果必须使用命令行工具也可以。


可能是重复的问题:将SWF转换为PNG - ruakh
3个回答

18

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命令,具体请参见此处的文档。

请注意,出于安全原因,重要的是要使用另一个命令(如escapeshellcmdescapeshellarg)转义传递给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问题,这些问题与您的问题重复:


除非我要求swf中的actionscript可以运行,否则我知道swfrender不能满足我的需求。其他的工具允许actionscript运行吗? - James T
一旦导出为png格式,无论使用何种工具,生成的png图像或mng动画都无法运行actionscript。 - Appleman1234
2
不,我的意思是在导出 Flash 动画之前需要运行代码来显示我想要的内容。 - James T
@Appleman1234:非常好的建议。有什么提示,如何从SWF渲染到PDF?我可以通过图像来完成,但是将字体和标签转换为PDF中的“文本”,而不是栅格化,会很好。 - dma_k
通常情况下,一个单独的问题应该是一个单独的问题。据我所知,没有办法将SWF转换为PDF文件而不使用官方Adobe软件并将其转换为图像,即使使用官方软件,如果未检测到相关标记类型的文本或Postscript,则仍将其转换为图像。 - Appleman1234

1

这是我最终使用的解决方案。

您可以使用像Xvfb(X11服务器)这样的工具,并在其中运行独立的Flash播放器投影仪(您可能需要安装一堆32位库),然后使用import等屏幕捕获实用程序来捕获屏幕并裁剪到所需大小。

我发现this page上有关于在Linux中呈现SWF截图的信息很有帮助。它还说,您可以使用gnash来完成此操作,但gnash无法用于Flash Player 9+。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接