Вопрос о параметре PHP imagefilter - PullRequest
0 голосов
/ 22 марта 2011

для значения параметра filtertype IMG_FILTER_CONTRAST, от каких числовых значений оно может варьироваться.

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Между -255 и 255

MG_FILTER_CONTRAST Фильтр позволяет изменять контрастность изображения и занимает всегоодин параметр для значения контрастности между -255 и 255 .Более низкие значения увеличивают контрастность изображения, существенно уменьшая количество цветов, чтобы они были более отделены и очевидны для глаз.Использование положительных значений сближает цвета, смешивая их с серым, пока на 255 не появится полностью серое изображение.

Источник

2 голосов
/ 16 августа 2013

Хотя в документации указано от -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.

Проблема в том, что диапазон никогда не проверяется, это имеет странный математический эффект для чисел вне диапазона.

Если вы введете 90 в PHP, 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
  • По мере того как числа исчисляются тысячами, визуальные различия незначительны, поскольку пиксели очень экспоненциально близки к своему максимуму.
...