PNG可以通过不同方式进行优化。
为了减少带宽使用和数据传输并减少对环境的影响,减少网站的PNG大小似乎是一个不错的选择。它是由Google和其他服务推荐的。
但是当计算机读取它以进行渲染时,优化PNG会对CPU负载产生影响吗?换句话说,减少PNG大小以优化大小是一个限制环境影响的好主意吗?
答案 0 :(得分:2)
优化PNG会在计算机读取它时对CPU负载产生影响吗?换句话说,减少PNG大小以优化大小是一个限制环境影响的好主意吗?
我不确定另一个问题是否存在,但是,关于第一个问题:
不,优化PNG压缩以使图像更小的努力仅影响压缩机侧。在客户端(解压缩器)端,速度或CPU使用率的差异几乎为零。
更确切地说:PNG压缩主要受两个因素的影响:“像素过滤”算法/策略(PNG特定)和ZLIB压缩级别。优化第一个对减压没有影响 (“未经过滤”的逻辑是同一个)。第二个因素对减压速度影响很小或没有影响(it might even be slightly beneficious)。
答案 1 :(得分:1)
正如@leonbloy在他的回答中所说,zlib压缩级别对解压缩速度几乎没有影响。然而,PNG滤波器的选择确实会产生明显的影响: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
选择NONE,SUB和UP过滤器,但要避免AVG和PAETH (请注意,pngcrush也有一个“-fast”选项,但这是出于不同的目的,即选择快速压缩方法)。
当输出的预期用途是通过网络传输到应用程序时,文件大小是主要影响,并且您希望使用最大压缩。但是,当您从本地光盘访问该文件时 或者从内存中,然后解码速度占主导地位,你想要使用“速度”优化,这将优化一些增加的文件大小,以便更快地解码。