Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2011, 01:34
жажду знаний
Отправить личное сообщение для bushstas Посмотреть профиль Найти все сообщения от bushstas
 
Регистрация: 17.07.2009
Сообщений: 202

алгоритм изменения насыщенности цвета
кто-нибудь знает алгоритм чтобы менять насыщенность цвета имея значения R G B, сидел в фотошопе, открыл выбор цвета и осмысливал, но чтото не очень получается понять этот самый механизм)))) может ктонить когданить видел такой или знает)))

требуется для imagesetpixel, попиксельно менять насыщенность у изображения, убавлять ее я уже умею а вот добавлять нет ))))
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2011, 01:50
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

http://tinyurl.com/47svhrq
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2011, 02:35
жажду знаний
Отправить личное сообщение для bushstas Посмотреть профиль Найти все сообщения от bushstas
 
Регистрация: 17.07.2009
Сообщений: 202

нашел
function imagesaturation($im){
  
   $L = imagesx($im);
    $H = imagesy($im);
   
   
   for($j=0;$j<$H;$j++){
      for($i=0;$i<$L;$i++){ 
         $rgb = imagecolorat($im, $i, $j); 
      
         $r = ($rgb >> 16) & 0xFF;
         $g = ($rgb >> 8) & 0xFF;
         $b = $rgb & 0xFF;
      
         $getArrayHSB = RGBtoHSB($r,$g,$b);
           
         $saturation = 0.7; //[0-2]
         $getArrayHSB[1] = $saturation*$getArrayHSB[1];
         $getArrayHSB[1] = max(0.0,min($getArrayHSB[1],1.0)); 
        
         $getArrayRGB = HSBtoRGB($getArrayHSB[0],
            $getArrayHSB[1],$getArrayHSB[2]);
      
         $hsbrgb = imagecolorallocate($im, 
            $getArrayRGB[0], $getArrayRGB[1], 
            $getArrayRGB[2]);
         $result = (($rgb & 0xff000000)|($hsbrgb));
    
         imagesetpixel($im, $i, $j, $result);    
      }
   }   
}

function RGBtoHSB( $r , $g , $b )
{
$r = $r/255;
$g = $g/255;
$b = $b/255;

$MAX = max($r,$g,$b);
$MIN = min($r,$g,$b);

if ($MAX == $MIN) return array(0,0,$MAX);
if ($r == $MAX) $HUE = ((0 + (($g - $b)/($MAX-$MIN))) * 60);
elseif ($g == $MAX) $HUE = ((2 + (($b - $r)/($MAX-$MIN))) * 60);
elseif ($b == $MAX) $HUE = ((4 + (($r - $g)/($MAX-$MIN))) * 60);
if ( $HUE < 0 ) $HUE += 360;

return array($HUE,(($MAX - $MIN)/$MAX),$MAX);
}


function HSBtoRGB( $H , $S , $V )
{ 
if ($S == 0) return array($V * 255,$V * 255,$V * 255);

$Hi = floor($H/60);
$f = (($H/60) - $Hi);
$p = ($V * (1 - $S));
$q = ($V * (1 - ($S * $f)));
$t = ($V * (1 - ($S * (1 - $f))));

switch ( $Hi )
{
case 0 : $red = $V; $gre = $t; $blu = $p; break;
case 1 : $red = $q; $gre = $V; $blu = $p; break;
case 2 : $red = $p; $gre = $V; $blu = $t; break;
case 3 : $red = $p; $gre = $q; $blu = $V; break;
case 4 : $red = $t; $gre = $p; $blu = $V; break;
case 5 : $red = $V; $gre = $p; $blu = $q; break;
default : exit("error -- invalid parameters\n\n");
}

return array(round($red * 255),round($gre * 255),round($blu * 255));
}

Последний раз редактировалось bushstas, 17.03.2011 в 02:58.
Ответить с цитированием
  #4 (permalink)  
Старый 22.03.2011, 23:58
Профессор
Отправить личное сообщение для Nanto Посмотреть профиль Найти все сообщения от Nanto
 
Регистрация: 21.12.2010
Сообщений: 243

HSB - математически очень криво реализованная модель... (если конечно нужна 16-битная точность)
Имхо, корректнее переводить в Lab и поднимать одновременно контраст (увеличивать на одно и тоже значение в "+" и в "-") у каналов a и b... (на словах трудно объяснить, посмотрите в окошке "Curves")
Ну или через YCrCb...
Переход между моделями обычно осуществляется через матрицы...
Поищите в сети "Модели цветового восприятия" Д.Фершильда...
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение кода цвета области. schwind Events/DOM/Window 14 19.02.2011 20:24
Изменения цвета картинки stieve Общие вопросы Javascript 40 23.11.2010 19:47
Как с помощью PHP сохранить какие-либо изменения в HTML документе? FirstFrost Работа 6 06.09.2010 16:16
Как с помощью PHP сохранить какие-либо изменения в HTML документе? FirstFrost Общие вопросы Javascript 1 15.07.2010 17:12
Поиск нужного скрипта (выбор цвета) Djumpen Общие вопросы Javascript 1 02.04.2010 08:23