PHP图像过滤器参数问题

PHP图像过滤器参数问题,php,gd,imagefilter,Php,Gd,Imagefilter,对于filtertype参数值IMG\u FILTER\u,它可以在-255和255之间的数值范围内进行对比 MG\u过滤器\u对比度 要更改图像的对比度, 只取一个参数作为 -255和255之间的对比度值。 较低的值会增加图像的对比度 这幅图,从本质上减少了 颜色的数量,以便 更加独立和明显的眼睛。 使用正值会带来 通过混合使颜色更接近 用灰色,直到255,你有一个 全灰色图片 介于-255和255 MG\u过滤器\u对比度 要更改图像的对比度, 只取一个参数作为 -255和255之间的对比度

对于filtertype参数值IMG\u FILTER\u,它可以在-255255之间的数值范围内进行对比

MG\u过滤器\u对比度 要更改图像的对比度, 只取一个参数作为 -255255之间的对比度值。 较低的值会增加图像的对比度 这幅图,从本质上减少了 颜色的数量,以便 更加独立和明显的眼睛。 使用正值会带来 通过混合使颜色更接近 用灰色,直到255,你有一个 全灰色图片


介于-255255

MG\u过滤器\u对比度 要更改图像的对比度, 只取一个参数作为 -255255之间的对比度值。 较低的值会增加图像的对比度 这幅图,从本质上减少了 颜色的数量,以便 更加独立和明显的眼睛。 使用正值会带来 通过混合使颜色更接近 用灰色,直到255,你有一个 全灰色图片


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

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

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

(100.0-contrast)/100.0
您可以在此处亲自看到:

这个公式应该将您在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\u FILTER\u对比度的范围为-25600到+25600
  • 上面和下面的数字不会被拒绝,但不会进一步影响像素
  • 低于-100的数字再次变为正,即-100==+100
  • 当数字达到数千时,由于像素非常接近其最大值,视觉差异很小

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

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

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

(100.0-contrast)/100.0
您可以在此处亲自看到:

这个公式应该将您在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\u FILTER\u对比度的范围为-25600到+25600
  • 上面和下面的数字不会被拒绝,但不会进一步影响像素
  • 低于-100的数字再次变为正,即-100==+100
  • 当数字达到数千时,由于像素非常接近其最大值,视觉差异很小

是否有其他来源可以证实这一点?这是文档中所说的,但不正确。是否有其他来源可以证实这一点?这是文档中所说的,但不正确。