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

bum*_*ack 6 apache-flex flash optimization

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

原始(433883字节)

优化(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(){
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Rob*_*cks 4

答案是肯定的,flex 编译器会使用一种 inbult 算法(可能是 ZLIB)自动压缩数据,并在另一端(flash 播放器)透明地解压缩数据,然后您才能访问未压缩的数据。

我将 ByteArray 嵌入到 SWF 中,虽然外部字节很大 (200 KB),但嵌入到 SWF 中时它会变成 30 KB,产生的结果与使用ByteArray.compress("zlib").

然后,我尝试手动压缩 PNG/JPEG 位图,结果比直接使用标签嵌入它要大[Embed](压缩 ByteArray 为 172 KB,嵌入图像为 168 KB)。让 Flex 编译器处理嵌入式数据压缩实际上比尝试在 ByteArray 方面尝试自己的技巧更好。

编辑:要回答有关 PNG 嵌入的问题,很难判断 Flex 编译器/Flash 播放器内部发生了什么。尽管 Adob​​e 以正确的文档而闻名,但 Adob​​e 也以许多“未记录的功能”而闻名。您的具体问题最好发送给 Flash 播放器架构师(例如Tinic Uro)或 adobe 布道者(例如Lee Brimelow),您可以在 Facebook 上轻松联系到其中一些人(请参阅此列表)。