【发布时间】:2011-07-20 09:21:18
【问题描述】:
对于 filtertype 参数值 IMG_FILTER_CONTRAST 它的范围可以是多少个数值。
【问题讨论】:
标签: php gd imagefilter
对于 filtertype 参数值 IMG_FILTER_CONTRAST 它的范围可以是多少个数值。
【问题讨论】:
标签: php gd imagefilter
在 -255 和 255
之间MG_FILTER_CONTRAST 过滤器允许您 改变图像的对比度, 并且只需要一个参数 -255 和 255 之间的对比度值。 较低的值会增加对比度 图片,基本上减少了 颜色的数量,使它们是 更加分离和明显的眼睛。 使用正值会带来 通过混合使颜色更接近 灰色,直到 255 你有一个 全灰色图片。
【讨论】:
即使文档声明为 -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【讨论】: