Ефект вибіркового кольору на PHP, Web-майстру і не тільки, Blog
- // Файл для обробки
- $im = ImageCreateFromJPEG ( 'test.jpg' );
- // Размеры изображения
- $width = ImageSX ( $im );
- $height = ImageSY ($im);
- для ($x = 0; $x $ширина; $x ++)
- для ($y = 0; $y $height; $y ++)
- $rgb = ImageColorAt ($im, $x, $y);
- $R =( $rgb >> 16 ) & 0xFF ;
- $G =( $rgb >> 8 ) & 0xFF ;
- $B = $rgb & 0xFF ;
- // Цветовой тон
- $maxRGB = max (масив($R, $G, $B));
- $minRGB = min (масив($R, $G, $B));
- $delta = $maxRGB - $minRGB ;
- якщо ($дельта!= 0)
- якщо ($maxRGB == $R)
- $h =(($G - $B)/$delta);
- >
- elseif ($maxRGB == $G)
- $h = 2 +( $B - $R )/ $дельта;
- >
- elseif ($maxRGB == $B)
- $h = 4 +( $R - $G )/ $дельта;
- >
- $hue = круглий ($h * 60);
- якщо ($hue 0)
- >
- інше
- $відтінок = 0;
- >
- // Оставить только красный цветовой тон
- якщо (!( $hue > 320 $hue 20 ))
- // Преобразовать цвет в оттенки серого
- $сірий = 0,2126 * $R + 0,7152 * $G + 0,0722 * $B ;
- $new_color = ImageColorAllocate ($im, $gray, $gray, $gray);
- ImageSetPixel ($im, $x, $y, $new_color);
- >
- >
- >
- // Прибраться за собою
- ImageDestroy ($im);
Як вичисляється діапазон колірного тону, я детально розповів у статті про визначення основного кольору, але тут, швидше за все, граничні значення доведеться скорегувати і підбирати досвідченим шляхом. А ось на перетворенні в оттенки серого варто остановиться. Для того, щоб сформувати колір з RGB у відтінку серого, використовується формула:
Сірий = 0,2126*R + 0,7152*G + 0,0722*B Відповідно, при знебарвленні точки зображення, кожна складова RGB вихідного кольору отримує однакові значення, рівні відтінків сірого.
Цей же код можна використовувати просто для перетворення зображення на відтінки сірого. Для цього треба прибрати обчислення тону кольору і перевірку його граничних значень.
А ось програмна реалізація алгоритму із статті. За допомогою цієї утиліти можна видаляти із зображення непотрібні кольори. Автор -wetal, за що йому велике спасибі.
Remove color 0.1