我有一个swf页面,我想将其转换为png文件。 在我转换文件之前,我想放大swf文件,以便我有一个更大的图像。 我尝试使用swftools进行转换,但是png图像质量不够好:放大的png图像看起来太模糊了。
您建议我应该如何捕获/使用swf文件的放大版本。 Linux兼容的命令行工具非常棒,因为我正在考虑转换数百个图像。
非常感谢
答案 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);
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