PNG优化和环境影响

PNG optimization and environment impact

PNG 可以通过不同的方式进行优化。

减少网站的 PNG 大小似乎是一个不错的选择,以减少带宽使用和数据传输并减少对环境的影响。 Google 和其他服务推荐它。

但是优化 PNG 对 CPU 计算机读取它进行渲染时的加载有影响吗?换句话说,减小 PNG 大小以优化大小是否是限制环境影响的好主意?

does optimize PNG have an impact on CPU load when the computer read it to render it? In other words, is reducing PNG size to optimize size a good idea to limit environment impact?

我不确定一个问题是从另一个问题推导出来的,但是,关于第一个问题:

不,优化 PNG 压缩以使图像变小的努力只会影响压缩器端。在客户端(解压缩器)端,速度或 CPU 使用率的差异几乎为零。

更准确地说:PNG 压缩主要受两个因素影响:"pixel filtering" algorithm/strategy(特定于 PNG)和 ZLIB 压缩级别。优化第一个对解压没有影响 ("unfiltering" 逻辑是一样的)。同样,第二个因素对解压速度影响很小或没有影响 ()。

正如@leonbloy 在他的回答中所述,zlib 压缩级别对解压缩速度影响很小或没有影响。然而,PNG 过滤器 selection 确实有一个显着的效果:AVG 和 PAETH 过滤器都需要更多的内存和 CPU 时间来过滤比更简单的过滤器。

Libpng 允许您通过 "png_set_filter()" 函数来控制它。要使用自适应过滤进行最大压缩,请使用

png_set_filter(write_ptr, 0, PNG_ALL_FILTERS);

同时为了避免较慢的 AVG 和 PAETH 过滤,使用

png_set_filter(write_ptr, 0, PNG_NONE_FILTER|PNG_SUB_FILTER|PNG_UP_FILTER);

或者配合libpng-1.6.22及以后的版本,可以更方便的使用

png_set_filter(write_ptr, 0, PNG_FAST_FILTERS);

使用pngcrush-1.8.1或更高版本,您可以使用

pngcrush -speed file.png file_pc.png

到select NONE、SUB 和 UP 过滤器,但避免使用 AVG 和 PAETH (注意 pngcrush 也有一个“-fast”选项,但这是为了不同的目的,即 select 快速压缩方法)。

当输出的预期用途是通过网络传输到应用程序时,文件大小是主要影响,您会希望使用最大压缩。但是当文件将从您的本地磁盘访问时 或者从内存中,那么解码速度占主导地位,你会想要使用 "speed" 优化,这将牺牲一些增加的文件大小来加快解码速度。