Answers:
zip格式支持几种不同的压缩算法。您可以对存档中的每个文件使用不同的算法。当您要存储已经无法从zip归档中进行额外压缩(例如PNG)的压缩文件时,可以使用完全不压缩的“存储”算法对这些文件进行编码。7-zip的“添加到存档”对话框使您可以在“压缩强度”下进行选择。
但是,当您的存档中不仅有图像而且还有其他更可压缩的资源时,为每个文件选择算法可能很繁琐。在这种情况下,您可能宁愿选择压缩存档中未压缩的图像格式。
TGA格式知道很多不同的模式,其中有些压缩,有些则没有。当您不想使用压缩时,请确保在使用的图形编辑器的导出选项中选择正确的压缩。另一种非压缩图像格式是BMP(Windows位图)。
这是我做的测试。我将相同的图像(当前项目中的一项资产)以不同的格式多次添加到zip归档文件中,其中一些具有正常强度的“放气”算法,而另一种具有“存储”的算法。抱歉,德语GUI。第二列为未压缩大小,第三列为压缩算法,第四列为压缩大小。
如您所见,对PNG进行压缩编码仅节省了0.3%,而对deflate编码的BMP缩小为原始文件的十分之一,该原始文件甚至小于PNG版本。这让我很惊讶。我本来希望PNG较小,因为应该针对图像数据优化PNG的压缩方法,而对于ZIP则不是。一个可能的解释是,我的图像编辑器(GIMP)向PNG文件添加了很多元信息,而BMP却不这样做。
未压缩的TGA在压缩之前和之后的文件大小方面与BMP相似,而压缩的TGA文件的压缩通过ZIP进一步改善,尽管不如未压缩的版本大。
除了放气和其他压缩强度设置以外,可能还需要尝试其他算法。哪种组合可获得最佳效果,可能取决于纹理的样式。但是,您可能还会考虑对游戏的资产负载进行基准测试,并让解压缩性能影响您使用哪种设置的决定。
底线:如果要避免双重压缩同时文件大小仍然较小,请PNG
与Store
zip算法或BMP
压缩zip算法一起使用。
不用担心
当.zip文件中使用的“放气”算法遇到一块已经很好压缩的数据块(如.png图像的像素数据)时,会发现它无法有效地对其进行压缩,并将其存储为文字未压缩的数据。在解压缩端进行复制所需的开销很小。
store
而不是deflate
节省时间,然后使用deflate
所有要发布的版本。
看起来已经给出了一些非常好的答案,但我想我还要再给出一个:
What are the solutions to this double compression problem?
解决方案:什么都不做。
基本原理:没有任何问题-是的,您两次压缩了信息,但是为什么要为此担心呢?数据太大了吗?减压太慢了吗?这是否比您此时可能要添加,完善,测试和/或调试的数十种功能重要?
如果使用PNG和OGG等专用格式,则无需压缩ZIP。
通过再次将它们压缩为ZIP,PNG,OGG和其他已经压缩的格式不会变得更小。压缩的100MB PNG仍约为100MB。
脚本,配置文件和其他基于文本的格式从压缩中受益匪浅,但是,相比之下,它们通常很小,它们不会存储那么多数据。如果您的游戏为100MB,则文本文件可能占整个游戏的1MB,即使您可以通过压缩使它们成为100KB,也只能赢得900KB,不到1%,这几乎不值得付出。
您甚至可能想要直接使用文件系统,而不是使用基于虚拟zip的文件系统。这将使修补非常容易:您可以交换所有修改过的文件。
.zip
文件,别无选择。例如,在android平台上,.apk
是一个.zip
文件,其中可能包含资源。