【问题标题】:PHP imagefilter parameter questionPHP imagefilter参数问题
【发布时间】:2011-07-20 09:21:18
【问题描述】:

对于 filtertype 参数值 IMG_FILTER_CONTRAST 它的范围可以是多少个数值。

【问题讨论】:

    标签: php gd imagefilter


    【解决方案1】:

    -255255

    之间

    MG_FILTER_CONTRAST 过滤器允许您 改变图像的对比度, 并且只需要一个参数 -255255 之间的对比度值。 较低的值会增加对比度 图片,基本上减少了 颜色的数量,使它们是 更加分离和明显的眼睛。 使用正值会带来 通过混合使颜色更接近 灰色,直到 255 你有一个 全灰色图片。

    Source

    【讨论】:

    • 还有其他来源可以确认吗?
    • 这是文档所说的,但它是不正确的。
    【解决方案2】:

    即使文档声明为 -255 到 +255,但事实并非如此! 假定为 -100 到 +100。但是,还有一个更深层次的问题:

    PHP 不将数字限制为 100。它会使用您指定的 whatever 数字直接传递到底层 lib-gd。 lib-gd 也不将范围限制为 100,因此无论您使用什么数字都会对像素产生直接影响。

    在 lib-gd 中,使用以下公式计算对比度:

    (100.0-contrast)/100.0
    

    您可以在这里亲自查看:https://bitbucket.org/libgd/gd-libgd/src/cdea9eb0ad01/src/gd_filter.c

    这个公式应该将您在 PHP 中请求的对比度(0 到 100 之间)转换为 0 到 1 之间的数字。

    问题是,因为从未检查过范围,所以它对范围之外的数字产生了数学上奇怪的影响。

    如果您在 PHP 中输​​入 90,lib-GD 会将其转换为 0.9,并使用该数字应用对比算法。说得通。 但是,如果您输入 2000,lib-gd 现在在其对比度算法中使用 -19,这是完全不同的。

    首先,您会注意到任何高于 100 低于 -100 的值都具有增加对比度的相同效果,因为数学。

    要实现“绝对”对比度效果,即将图片中的所有像素移动到 0 或 255,25600 是您想要的数字。值为 127 的像素将变为 0,值为 128 的像素将变为 255。

    如果您想使图像完全纯色(特别是如果您先应用灰度滤镜,您将获得全黑和全白),这将非常有用。

    不过我不会依赖这种行为,因为 PHP 或 lib-gd 都可能开始限制新版本的范围。

    所以,实际上:

    • IMG_FILTER_CONTRAST的范围是-25600到+25600
    • 上方和下方的数字不会被拒绝,但不会进一步影响像素。
    • 低于 -100 的数字再次变为正数,即 -100 === +100
    • 随着数字达到数千,视觉差异很小,因为像素非常接近其最大值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-19
      • 2011-08-06
      • 2011-07-19
      • 2023-03-17
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多