【问题标题】:PNG optimization and environment impactPNG优化和环境影响
【发布时间】:2017-07-12 13:15:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: image optimization png


    【解决方案1】:

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

    我不确定一个问题是从另一个问题开始的,但是,关于第一个问题:

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

    更准确地说:PNG 压缩主要受两个因素影响:“像素过滤”算法/策略(特定于 PNG)和 ZLIB 压缩级别。优化第一个对解压没有影响 (“未过滤”逻辑是一回事)。第二个因素也对减压速度几乎没有影响(it might even be slightly beneficious)。

    【讨论】:

    • 谢谢! “我不确定一个问题是从另一个问题而来的”:) 你是对的!
    【解决方案2】:

    正如@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”选项,但这是为了不同的目的,即选择快速压缩方法)。

    当输出的预期用途是通过网络传输到应用程序时,文件大小是主要影响,您希望使用最大压缩。但是当文件将从您的本地磁盘访问时 或从内存中,则解码速度占主导地位,您需要使用“速度”优化,这将牺牲一些增加的文件大小以获得更快的解码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      相关资源
      最近更新 更多