Flex:flex编译器是否自动优化嵌入式PNG资产?

时间:2010-06-29 09:06:55

标签: flex optimization flash

我试图通过优化嵌入式PNG图形(使用ImageOptim工具)来进一步减少SWF文件的文件大小。令我惊讶的是,这并没有产生任何影响,因此我创建了两个测试图像:

Original(433883字节)

Optimized(273723字节)

将这些资源中的任何一个嵌入到一个简单的ActionScript项目中时,编译的SWF大小约为274kb。这提出了一个问题:Flex是否在编译期间优化嵌入式PNG资产?如果是,是否有一些关于优化的文档? 它不能仅仅因为SWF压缩,因为压缩图像根本不会减少文件大小。

以下是完整性代码:

package
{
    import flash.display.Sprite;

    public class SizeTest extends Sprite 
    {
        [Embed("/assets/original.png")]
        private var ImageAsset:Class;

        public function SizeTest(){
        }
    }
}

2 个答案:

答案 0 :(得分:4)

答案是,flex编译器使用其中一个inbult算法(可能是ZLIB)自动压缩数据,并在它允许您访问之前在另一侧(flash player)透明地解压缩数据未压缩的数据。

我正在将一个ByteArray嵌入到SWF中,虽然外部字节很大(200 KB),但当嵌入到SWF中时,它变成30 KB,产生与使用{{1}手动压缩它的结果几乎完全相同的结果}。

然后我尝试手动压缩PNG / JPEG位图,结果比使用ByteArray.compress("zlib")标记(172 KB作为压缩ByteArray而不是168 KB作为嵌入图像)明显地嵌入它更大。让Flex编译器处理嵌入式数据压缩实际上比在ByteArray端尝试自己的技巧要好。

编辑:要回答有关PNG嵌入的问题,很难说出flex编译器/ flash播放器内部的情况。虽然以正确的文档而闻名,但Adobe也因许多“未记录的功能”而闻名。您的具体问题最好发送给Flash播放器架构师(例如Tinic Uro)或adobe福音传道者(例如Lee Brimelow),其中一些人可以轻松地在Facebook上访问(请参阅此list

答案 1 :(得分:2)

swf格式内部有32位PNG(具有alpha通道的PNG)的特殊格式,它们被分割成24位png和灰度alpha蒙版,从而alpha蒙版被JPEG压缩。不完全确定Flex Builder是否进行了这种优化,因为我记得至少在旧版本的嵌入式PNG中没有进行优化。

尽管如此,如果您正在寻找可以优化swfs中嵌入图像的工具,您应该查看Joa Ebert的“Reducer”:http://blog.joa-ebert.com/2009/08/08/reducer/