PHP imagefilter参数问题

时间:2011-03-22 10:51:11

标签: php gd imagefilter

对于filtertype参数值IMG_FILTER_CONTRAST它可以包含哪些数值。

2 个答案:

答案 0 :(得分:3)

-255 255 之间

  

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

Source

答案 1 :(得分:2)

即使文档说明-255到+255,它也不是! 假设为-100到+100。但是,还有一个更深层次的问题:

PHP不会将数量限制为100.它会直接传递给底层的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,并使用该数字应用对比度算法。说得通。 HOWEVER ,如果输入2000,lib-gd现在在其对比度算法中使用-19,这是完全不同的。

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

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

如果您想要使图像完全呈现平面颜色(尤其是首先应用灰度滤镜,则会获得完整的黑白色),这非常有用。

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

所以,实际上:

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