【发布时间】:2011-08-16 18:12:05
【问题描述】:
我有一个 swf 页面,我想将其转换为 png 文件。 在转换文件之前,我想放大 swf 文件,以便获得更大的图像。 我尝试使用swftools进行转换,但是png图像质量不够好:放大的png图像看起来太模糊了。
您建议我应该怎么做才能捕获/使用放大版的 swf 文件。 一个 linux 兼容的命令行工具会很棒,因为我正在考虑转换数百张图像。
非常感谢
【问题讨论】:
标签: flash
我有一个 swf 页面,我想将其转换为 png 文件。 在转换文件之前,我想放大 swf 文件,以便获得更大的图像。 我尝试使用swftools进行转换,但是png图像质量不够好:放大的png图像看起来太模糊了。
您建议我应该怎么做才能捕获/使用放大版的 swf 文件。 一个 linux 兼容的命令行工具会很棒,因为我正在考虑转换数百张图像。
非常感谢
【问题讨论】:
标签: flash
这不是 linux 的方式,但我无法想象别的。
我的解决方案是编写 AIR 应用程序,它加载 swf 文件,将其添加到屏幕,制作“打印屏幕”并将打印屏幕保存到 png。
1) 每个显示对象都可以在BitmapData 上绘制,并带有额外的转换控制(您需要缩放),例如:
var btn:Button = new Button;
var bitmap:BitmapData = new BitmapData(width, height);
var m:Matrix = new Matrix;
m.scale(2, 2);
bitmap.draw(btn, m);
2) BitmapData 可以转成png保存。要进行转换,您可以使用内置的PNGEncoder。输出BiteArray可以保存到指定文件:
var bitmap:BitmapData = makeScreenShot();
var encoder:PNGEncoder = new PNGEncoder();
var bytes:ByteArray = encoder.encode(bitmap);
var imgStream:FileStream = new FileStream();
var img:File = new File(path);
imgStream.open(img, FileMode.WRITE);
imgStream.writeBytes(bytes);
imgStream.close();
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/filesystem/FileStream.html
另外,由于 PNGEncoder 很慢,您可以使用 Alchemy 编写自己的代码,因为 pnglib 是移植的(它在 sdk 示例中)。
3) 您可以在命令行参数中将 swfs 的路径传递给 AIR 应用程序:
<mx:WindowedApplication
xmlns:mx="http://www.adobe.com/2006/mxml"
invoke="onInvoke(event)">
...
private function onInvoke(event:InvokeEvent):void
{
for each (str:String in event.arguments)
//do something
}
http://cookbooks.adobe.com/post_How_do_I_use_command_line_arguments_with_my_AIR_ap-8003.html
【讨论】: