代码之家  ›  专栏  ›  技术社区  ›  Joe Lencioni

在PHP中,imagepng()接受一个过滤器参数。这些过滤器如何影响函数的输出?

  •  15
  • Joe Lencioni  · 技术社区  · 16 年前

    这些过滤器如何影响 imagepng() 在PHP中?

    • PNGGNONYA滤波器
    • PNGH-Fielt-NO
    • PNGH-FieldSub
    • PNGH-FieldUpUP
    • PNGH-FILTRE AVG
    • PNG过滤器
    • PNG- AlLa滤波器

    The documentation 简单地说,“一个特殊的png过滤器,由imagepng()函数对每个过滤器使用”。

    似乎使用png-no-u过滤器会减少输出的文件大小,但除此之外,我不确定它是如何受到影响的。任何见解都会受到赞赏。

    3 回复  |  直到 10 年前
        1
  •  14
  •   Juan Cortés    16 年前

    根据PNG规范 http://www.w3.org/TR/PNG-Filters.html 这些过滤器的目的是为图像数据准备最佳压缩。

    与 无滤波器 扫描线是 传输未修改;仅 必须插入筛选器类型字节 在数据之前。

    这个 子滤波器 传送 每个字节与 的相应字节的值 先验像素。

    这个 上滤波器 就像潜艇一样 除了像素 在当前像素的正上方, 而不仅仅是左边 作为预测器。

    这个 平均滤波器 使用的平均值 两个相邻像素(左和 上面)预测 像素。

    这个 Paeth滤波器 计算一个简单的 三的线性函数 相邻像素(左、上、上 左),然后选择作为 最靠近的相邻像素 计算值。这项技术到期了 致Alan W.Paeth[Paeth]。*

        2
  •  4
  •   Glenn Randers-Pehrson    10 年前

    从链接到问题的imagepng()手册页,

    过滤器

    允许减小PNG文件大小。它是一个位掩码字段,可以 设置为png_filter_xxx常量的任意组合。 png_no_filter>或png_all_filters也可分别用于 禁用或激活所有筛选器。

    所以,要让libpng尝试none、sub和up过滤器,可以使用

    PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP
    

    png_all_过滤器只是

    PNG_FILTER_NONE|PNG_FILTER_SUB|PNG_FILTER_UP|PNG_FILTER_AVG|PNG_FILTER_PAETH
    

    至于使用哪种过滤器,取决于图像。256色或更少颜色的图像通常使用png_no_过滤器压缩得更好,而许多颜色的图像(如照片)通常使用png_filter_sub或png_all_过滤器压缩得更好。像“optipng”或“pngcrush”这样的应用程序试图优化过滤器的选择。如果您要使用其中一个第三方应用程序进行最终优化,那么您只需为工作副本使用png_no_过滤器,以提高速度。

        3
  •  2
  •   Quasipickle    16 年前

    这些都是PNG编码器用来确定像素值的不同算法。不太了解,但这一页似乎有点深入: http://www.w3.org/TR/PNG-Filters.html

    推荐文章