2010-06-29 92 views
6

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

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(){ 
     } 
    } 
} 
+0

压缩图像使文件大得多。所以这是一个坏主意。你在使用eclipse吗?如果是这样,请尝试Project> Export Release build。它会减少SWF大小 – Treby 2010-06-30 09:53:18

+0

这可能是一个愚蠢的问题,但是你在根应用程序中包含对SizeTest的引用吗?如果没有,sizeTest不会被编译,并且图像没有被嵌入。 – 2010-06-30 17:59:24

+0

@Treby是的,我知道这一点。导出的SWF是以发布模式编译的。 @Marty上面列出的类*是根应用程序。这是Flex中的一个简单的仅ActionScript项目。 – bummzack 2010-07-01 19:29:42

回答

4

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

我将一个ByteArray嵌入到SWF中,尽管外部的字节数很大(200 KB),但当嵌入到SWF中时,它将变成30 KB,产生的结果几乎与使用ByteArray.compress("zlib")手动压缩该结果的结果完全相同。

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

编辑:要回答你关于PNG嵌入的问题,很难说在flex编译器/ flash播放器里面发生了什么。虽然以正确的文档而闻名,但Adobe也因许多“无证的功能”而闻名。您的具体问题最好发送给Flash播放器架构师(例如Tinic Uro)或Adobe传教士(例如Lee Brimelow),其中一些人可以在Facebook上轻松访问(请参阅list)。

+0

有趣。我会想象,虽然一个PNG已经严重压缩,并不应该通过使用zlib得到那么小? – bummzack 2011-02-13 09:37:38

+0

@bummzack - 查看我的更新后的文章,是的,他们似乎使用每种文件格式最优化的压缩,可能会关闭压缩,而不会产生显着的改进。我发现无论你做什么,默认的flex [Embed]配置总是效果最好。我想这里是Adobe真正闪耀的一个地方。 – 2011-02-17 02:26:33

+0

感谢您的回答。我知道如何将答案标记为“接受”,我会这样做,尽管它没有完全回答我最初的问题。我没有在ByteArray *方面做任何诡计。我使用的是一个PNG压缩工具(http://imageoptim.pornel.net/),它可以完成很多特殊的图像压缩(参见:http://optipng.sourceforge.net/pngtech/optipng.html)。使用优化后的图片而不是“未优化”的图片并没有减少已编译的“swf”的文件大小。因此,想知道Flex编译器是否实现了这些PNG压缩技术(请参阅链接)。 – bummzack 2011-02-17 09:32:14

2

该瑞士法郎格式具有内部为在那里它们得到分裂成24bit的PNG和灰度阿尔法掩模32个PNG(那些带有alpha通道)的特殊格式由此alpha掩码获得JPEG压缩。我完全不知道Flex Builder是否做了这种优化,因为我记得至少在旧版本的嵌入式PNG中没有任何优化。

不过,如果你正在寻找一个工具,可以在主权财富基金优化嵌入式图像,你应该检查出JOA艾伯特的“减速”:使用http://blog.joa-ebert.com/2009/08/08/reducer/

+0

感谢您的回答。 我知道在Flash IDE中的PNG压缩。但是AFAIK只适用于Flash IDE而不适用于Flex。 我也知道Joa Ebert的Reducer ...但我仍然想知道为什么编译后的SWF文件大小基本上与两个图像相同(只有几个字节) – bummzack 2010-07-01 19:34:31

+0

我也想知道同样的事情。我通过减小量化表的大小来优化PNG。结果swfs给出了类似的文件大小。 – 2013-12-12 07:04:39