压缩swf文件是否有可能导致更大的文件?

时间:2010-09-26 14:44:14

标签: flex flash gzip

当我GZIP一个swf文件时,大小从1,21 mb到1,86 mb ......所以,我的问题有点自己回答。真正的问题是这是如何可能的?我想,正如我的一位同事所说,swf已经是二进制的,不能再被压缩了。

结论也是不应该执行压缩swf文件。

3 个答案:

答案 0 :(得分:5)

SWF已经编码,该编码包括压缩。如果您打算压缩已经压缩的文件,那么压缩将导致更大的文件。例如,当您尝试 ZIP JPEG PNG 文件时,就会发生这种情况。

你的同事说的不是真的。有很多可以压缩的二进制文件。例如, BMP 文件。

答案 1 :(得分:5)

查看SWF文件的前三个魔术字节。如果它们是FWS,则它是一个未压缩的文件,如果它们是CWS,它已经使用zLib压缩,并且无法使用gZip进一步压缩(也使用zLib压缩)。虽然它应该变得更大,但是增长50%的尺寸是极端的......

通常,未压缩的SWF文件可以被压缩一点,但不是那么多。 SWF文件格式非常优化,通常会生成非常小且紧凑的文件。

顺便说一句,如果您使用我的工具Precomp和压缩比gZip更好的工具(例如7-Zip),您还可以先压缩大多数压缩的SWF文件在文件上运行Precomp,然后在生成的PCF文件上使用7-Zip。

这也将检测并重新压缩SWF文件中的JPG文件。这是一个完全无损的过程,也适用于其他一些已压缩的文件类型,如ZIP,JPG,PNG,GIF。

答案 2 :(得分:1)

在信息理论中,有一个名为entropy的概念,它是对消息中“真实”信息量的一种衡量(在您的示例中,消息是SWF文件)。用于此措施的常用单位之一是位。

1.21 MB的文件占用大约10,150,215位。然而,其熵可能小于10,150,215位,因为数据中存在某种顺序或可预测性。假设您测量了该文件的熵,并得出熵只有9,000,000位的结论。这意味着您无法以无损方式将其压缩到小于9,000,000位的大小。

但压缩算法最终会向压缩文件添加更多数据,以便以后能够解压缩。算法包括关于压缩数据时所做的“缩写”类型的一些信息。这意味着由于额外的算法特定数据,将无法达到熵给出的理论极限。

如果您的文件已经压缩,则意味着其大小已经接近原始数据的熵。当您尝试再次压缩它时(特别是在您使用相同算法的情况下),尺寸减小量不会太大,您将添加另一层特定于算法的额外数据。如果额外数据超过额外的大小减少,则两次压缩的文件将大于仅压缩一次的文件。