首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP imagefilter参数问题

PHP imagefilter参数问题
EN

Stack Overflow用户
提问于 2011-03-22 18:51:11
回答 2查看 251关注 0票数 0

对于filtertype参数值IMG_FILTER_CONTRAST,它的取值范围是多少。

EN

回答 2

Stack Overflow用户

发布于 2013-08-17 00:28:14

尽管文档中规定了-255到+255,但事实并非如此!它应该是-100到+100。但是,还有一个更深层次的问题:

PHP不会将这个数字限制为100。它通过直接传递到底层的lib-gd,而不管您指定的号是多少。lib-gd也不会将范围限制为100,因此无论您使用哪个数字,都会直接影响像素。

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

代码语言:javascript
复制
(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可能会在新版本中限制范围。

所以,实际上:

  • 上下的像素范围是-25600到IMG_FILTER_CONTRAST不会被拒绝,但不会影响-100以下的像素再次变为正数,即-100 === +100
  • 随着数字的增加,视觉差异变得很小,因为像素是如此指数级地接近其最大值。
票数 3
EN

Stack Overflow用户

发布于 2011-03-22 18:54:25

-255255之间

MG_FILTER_CONTRAST filter允许您更改图像的对比度,并且只采用一个参数作为-255255之间的对比度值。较低的值增加了图片的对比度,本质上减少了颜色的数量,因此它们对眼睛来说更加独立和明显。使用正值可以通过将颜色与灰色混合来使颜色更紧密地结合在一起,直到值为255时,您才能获得全灰色图片。

Source

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5390053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档