На странице произошла ошибка #S51. Свяжитесь с вебмастером. PHP 5.6 и PHP 7 на русском: Функция imagecolorclosesthwb() - Получение индекса цвета, имеющего заданный тон, белизну и затемнение

imagecolorclosesthwb

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

imagecolorclosesthwb Получение индекса цвета, имеющего заданный тон, белизну и затемнение

Описание

int imagecolorclosesthwb ( resource $image , int $red , int $green , int $blue )

Получение индекса цвета, имеющего значения тона, белизны и затемнения наиболее близкие к заданному цвету.

Список параметров

image

Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor().

red

Значение красного компонента цвета.

green

Значение зеленого компонента цвета.

blue

Значение синего компонента цвета.

Возвращаемые значения

Возвращает целочисленный индекс цвета, имеющего значения тона, белизны и затемнения наиболее близкие к заданному цвету.

Примеры

Пример #1 Пример использования imagecolorclosesthwb()

<?php
$im 
imagecreatefromgif('php.gif');

echo 
'HWB: ' imagecolorclosesthwb($im116115152);

imagedestroy($im);
?>

Результатом выполнения данного примера будет что-то подобное:

HWB: 33

Список изменений

Версия Описание
5.3.0 Функция теперь доступна в Windows

Смотрите также

  • imagecolorclosest() - Получение индекса цвета ближайшего к заданному

Коментарии

Автор:
I have written a function which uses the deltaE-function of the CMC.
It returns much better results than imagecolorclosestHWB() or imageColorClosest().

A test-script is online on http://www.fuhrpark-software.de/spielwiese/color.php?color=ffff00

<?php
/*
 * Returns the index of the palette-color which is most similar
 * to $givenColor.
 * 
 * $givenColor and the colors in $palette should be either
 * formatted as (#)rrggbb
 * (e. g. "ff0000", "4da4f3" or "#b5d7f3")
 * or arrays with values for red, green and blue
 * (e. g. $givenColor = array( 0xff, 0x00, 0x00 ) )
 *
 * References:
 * function rgb2lab
 *   - http://www.f4.fhtw-berlin.de/~barthel/ImageJ/ImageJ.htm
 * 
 * function rgb2lab & function deltaE
 *   - http://www.brucelindbloom.com
 */
function getNearestColor(
 
$givenColor,
 
$palette = array( 'blue' => '43aafd','red' => 'fe6256','green' => '64b949','yellow' => 'fcf357',
   
'black' => '656565','white' => 'fdfdfd','orange' => 'fea800','purple' => '9773fe')
) {
  if(!
function_exists('rgb2lab')) {
    function 
rgb2lab($rgb) {
     
$eps 216/24389$k 24389/27;
     
// reference white D50
     
$xr 0.964221$yr 1.0$zr 0.825211;

     
$rgb[0] = $rgb[0]/255//R 0..1
     
$rgb[1] = $rgb[1]/255//G 0..1
     
$rgb[2] = $rgb[2]/255//B 0..1

      // assuming sRGB (D65)
     
$rgb[0] = ($rgb[0] <= 0.04045)?($rgb[0]/12.92):pow(($rgb[0]+0.055)/1.055,2.4);
     
$rgb[1] = ($rgb[1] <= 0.04045)?($rgb[1]/12.92):pow(($rgb[1]+0.055)/1.055,2.4);
     
$rgb[2] = ($rgb[2] <= 0.04045)?($rgb[2]/12.92):pow(($rgb[2]+0.055)/1.055,2.4);

     
// sRGB D50
     
$x 0.4360747*$rgb[0] + 0.3850649*$rgb[1] + 0.1430804 *$rgb[2];
     
$y 0.2225045*$rgb[0] + 0.7168786*$rgb[1] + 0.0606169 *$rgb[2];
     
$z 0.0139322*$rgb[0] + 0.0971045*$rgb[1] + 0.7141733 *$rgb[2];

     
$xr $x/$xr$yr $y/$yr$zr $z/$zr;

     
$fx = ($xr $eps)?pow($xr1/3):($fx = ($k $xr 16) / 116);
     
$fy = ($yr $eps)?pow($yr1/3):($fy = ($k $yr 16) / 116);
     
$fz = ($zr $eps)?pow($zr1/3):($fz = ($k $zr 16) / 116);

     
$lab = array();
     
$lab[] = round(( 116 $fy ) - 16);
     
$lab[] = round(500*($fx-$fy));
     
$lab[] = round(200*($fy-$fz));     
      return 
$lab;
    }
  }
 
  if(!
function_exists('deltaE')) {
    function 
deltaE($lab1$lab2) {
     
// CMC 1:1
     
$l 1$c 1;
     
     
$c1 sqrt($lab1[1]*$lab1[1]+$lab1[2]*$lab1[2]);
     
$c2 sqrt($lab2[1]*$lab2[1]+$lab2[2]*$lab2[2]);
     
     
$h1 = (((180000000/M_PI) * atan2($lab1[1],$lab1[2]) + 360000000) % 360000000)/1000000;

     
$t = (164 <= $h1 AND $h1 <= 345)?(0.56 abs(0.2 cos($h1+168))):(0.36 abs(0.4 cos($h1+35)));
     
$f sqrt(pow($c1,4)/(pow($c1,4) + 1900));
     
     
$sl = ($lab1[0] < 16)?(0.511):((0.040975*$lab1[0])/(0.01765*$lab1[0]));
     
$sc = (0.0638 $c1)/(0.0131 $c1) + 0.638;
     
$sh $sc * ($f $t -$f);
     
      return 
sqrt(
       
pow(($lab1[0]-$lab2[0])/($l $sl),2) + 
       
pow(($c1-$c2)/($c $sc),2) + 
       
pow(sqrt(
              (
$lab1[1]-$lab2[1])*($lab1[1]-$lab2[1]) + 
              (
$lab1[2]-$lab2[2])*($lab1[2]-$lab2[2]) + 
              (
$c1-$c2)*($c1-$c2)
            )/
$sh,2)
      );
    }
  }
 
  if(!
function_exists('str2rgb')) {
    function 
str2rgb($str)
    {
     
$str preg_replace('~[^0-9a-f]~','',$str);
     
$rgb str_split($str,2);
      for(
$i=0;$i<3;$i++)
       
$rgb[$i] = intval($rgb[$i],16);

      return 
$rgb;
    }
  }
 
 
$givenColorRGB is_array($givenColor?$givenColor:str2rgb($givenColor);

 
$min 0xffff;
 
$return NULL;
 
  foreach(
$palette as $key => $color) {
   
$color is_array($color)?$color:str2rgb($color);
    if(
$min >= ($deltaE deltaE(rgb2lab($color),rgb2lab($givenColorRGB))))
    {
     
$min $deltaE;
     
$return $key;
    }
  }
 
  return 
$return;
}
?>
2009-06-22 06:56:21
http://php5.kiev.ua/manual/ru/function.imagecolorclosesthwb.html

    Поддержать сайт на родительском проекте КГБ