如何保存swf文件的放大副本

时间:2011-08-16 18:12:06

标签: flash

我有一个swf页面,我想将其转换为png文件。 在我转换文件之前,我想放大swf文件,以便我有一个更大的图像。 我尝试使用swftools进行转换,但是png图像质量不够好:放大的png图像看起来太模糊了。

您建议我应该如何捕获/使用swf文件的放大版本。 Linux兼容的命令行工具非常棒,因为我正在考虑转换数百个图像。

非常感谢

1 个答案:

答案 0 :(得分:2)

这不是一种linux方式,但我无法想象其他任何东西。

我的解决方案是编写AIR应用程序,它加载swf文件,将其添加到屏幕上,制作“prinscreen”并将printcreen保存到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);

更多相关信息:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#draw%28%29

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)您可以在命令行参数中将patps传递给swf到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