воскресенье, 1 сентября 2019 г.

Как я поднимал контраст



Сравните предыдущую и эту картинку. Тут, очевидно, сильно задран контраст. Но этот контраст задран безо всякой помощи графического редактора! Конечно, в графическом редакторе я обработанную картинку уменьшил, обвёл в рамочку, но контраст поднимал при помощи простенького скрипта на PHP.


На резонный вопрос: а зачем? - отвечу, что потому, что могу. Just for fun. Там нет никаких Вейвлет-преобразований и прочего хитровысранного матана. Скрипт тупо берёт картинку пиксел за пикселом, раскладывает на составляющие по цветам...
$color = imagecolorat($f, $x, $y);
if ($color === FALSE) {
    throw new Exception();
}
$r = ($color >> 16) & 255;
$g = ($color >> 8) & 255;
$b = $color & 255;
Для красного цвета я написал "& 255" на тот случай, если там какой-нибудь альфа-канал есть, или ещё какая-нибудь хрень, которую надо отсечь.
А потом для каждой составляющей каждого пиксела вычисляет значение.
if ($c >= 128) {
    $c = min(255, floor(($c - 128) * (255 - $c) / 128 + $c));
} else {
    $c = max(0, floor($c - (128 - $c) * $c / 128));
}
А получившийся цвет потом просто засовывает обратно в картинку.

Иногда, конечно, были ошибочки-с. В том, что куда на что делить и чего от чего отнимать. Ради этой картинки я весь пост и написал, потому что в нём ничего особенного нет, а в этой картинке что-то прикольное всё-таки есть :)

Комментариев нет:

Отправить комментарий

Ублюдочный Гугл поломал форму комментариев. Извините.