Селективен цветови ефект в PHP, Webmaster и други, блог
- // Файл за обработка
- $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 = макс (масив($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)
- >
- друго
- $hue = 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, за което много му благодаря.
Премахване на цвят 0.1