imagecolorallocate

(PHP 4, PHP 5)

imagecolorallocate — Allocate a color for an image

Описание

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

Returns a color identifier representing the color composed of the given RGB components.

imagecolorallocate() must be called to create each color that is to be used in the image represented by image .

Замечание: The first call to imagecolorallocate() fills the background color in palette-based images - images created using imagecreate().

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

image

An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().

red

Value of red component

green

Value of green component

blue

Value of blue component

These parameters are integers between 0 and 255 or hexadecimals between 0x00 and 0xFF.

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

A color identifier or FALSE if the allocation failed.

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

Версия Описание
Prior to 5.1.3 Returns -1 if the allocation failed.

Примеры

Пример #1 imagecolorallocate() example

<?php

$im 
imagecreate(100100);

// sets background to red
$background imagecolorallocate($im25500);

// sets some colors
$white imagecolorallocate($im255255255);
$black imagecolorallocate($im000);

// hexadecimal way
$white imagecolorallocate($im0xFF0xFF0xFF);
$black imagecolorallocate($im0x000x000x00);

?>

Коментарии

Actually, you can't allocate more than 256 colours for an paletted image (ImageCreate).
Use ImageCreateTrueColor instead. For it to work, you need libgd version 2 support in php though.
2002-02-16 22:30:57
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
I was unable to get any of the posted methods for converting colour to grayscale to work.  The problem appears to be the way gd creates images from jpeg inconsistently over various versions.  Eventually I wrote my own that works for me - this approach allocates the 256 color pallete first.  You can also play with separate $r, $g, $b variables before using imagecolorallocate in order to tone or tint the image.

<?php
$resource 
'whatever.jpg';
$im_size GetImageSize($resource);
$imageWidth $im_size[0];
$imageHeight $im_size[1];
$im imageCreate($imageWidth,$imageHeight);
for (
$c 0$c 256$c++) {     
     
ImageColorAllocate($im$c,$c,$c);
}
$im2 ImageCreateFromJpeg($resource);
ImageCopyMerge($im,$im2,0,0,0,0$imageWidth$imageHeight100);
ImageDestroy($im2);
?>

go on using $im as your image, it is now grayscale ....
2003-04-15 22:31:02
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
<?php

/*
An example combining the use of ImageColorAllocate, Imagesetpixel, Imagecopyresized and some basic Trig
*/

Header("Content-type: image/png");

$height 128;
$width 128;

$imA ImageCreate($width$height);
$imB ImageCreate($width*4$height*4);
$bckA ImageColorAllocate($imA0,0,0);
$bckB ImageColorAllocate($imB0,0,0);

//GENERATE GRAY SCALE PALLETE

for($c=0;$c<256;$c++){
               
ImageColorAllocate($imA$c$c$c);
                }

//PRODUCE DATA

$m=rand(0,10);
for(
$c=0;$c<128;$c++){
               
$s=  (sindeg2rad($c*360*$m/128) )+1)*127;
               
$col_arr[$c]=$s;
                }
for(
$y=0;$y<$height;$y++){
        for(
$x=0;$x<$width;$x++){
               
$imgA[$x][$y]=$col_arr[$x];
                }
        }
for(
$y=0;$y<$height;$y++){
        for(
$x=0;$x<$width;$x++){
               
$imgB[$x][$y]=$col_arr[$y];
                }
        }

//SET PIXELS

for($y=0;$y<$height;$y++){
        for(
$x=0;$x<$width;$x++){
               
$imgC[$x][$y]=$imgA[$x][$y]+$imgB[$x][$y];
               
$s=$imgC[$x][$y]/2;
               
Imagesetpixel($imA,$x,$y,$s);
                }
        }

//RESIZE IMAGE FOR DISPLAY

Imagecopyresized ($imB$imA0000$width*4$height*4$width$width);
ImagePNG($imB);
?>
2003-09-13 20:44:56
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
this might help someone, how to allocate an color from an html color-definition:

<?php
$fg 
"#ff0080";

$red 100;
$green 100;
$blue 100;
if( 
eregi"[#]?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})"$fg$ret ) )
{
   
$red hexdec$ret[1] );
   
$green hexdec$ret[2] );
   
$blue hexdec$ret[3] );
}

$text_color ImageColorAllocate$img1$red$green$blue );
?>
2004-03-05 12:43:35
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Some of you maybe want to use HSV color model for drawing color selectors and circles:

<?php
 
function &colormap_hsv_to_rgb($h$s$v)
  {
   
$ret = new stdClass();

    if(
$s == 0)
    {
     
$ret->$v;
     
$ret->$v;
     
$ret->$v;

      return 
$ret;
    }
    else
    {
     
$h floatval($h) / 255.0;
     
$s floatval($s) / 255.0;
     
$v floatval($v) / 255.0;

     
$hue $h;

      if(
$hue == 1.0)
       
$hue 0.0;

     
$hue *= 6.0;

     
$i intval($hue);
     
$f $hue floatval($i);
     
$w $v * (1.0 $s);
     
$q $v * (1.0 - ($s $f));
     
$t $v * (1.0 - ($s * (1.0 $f)));

      switch(
$i)
      {
         case 
0$ret->$v$ret->$t$ret->$w; break;
         case 
1$ret->$q$ret->$v$ret->$w; break;
         case 
2$ret->$w$ret->$v$ret->$t; break;
         case 
3$ret->$w$ret->$q$ret->$v; break;
         case 
4$ret->$t$ret->$w$ret->$v; break;
         case 
5$ret->$v$ret->$w$ret->$q; break;
      }
    }
   
   
$ret->intval($ret->255.0);
   
$ret->intval($ret->255.0);
   
$ret->intval($ret->255.0);

    return 
$ret;
  }
?>
2004-07-19 14:10:01
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
2 functions to convert from HSV colorspace (hue/saturation/brightness) to RGB (red/green/blue) colorspace and back. 
<?php
// $c = array($red, $green, $blue)
// $red=[0..1], $green=[0..1], $blue=[0..1];
function rgb2hsv($c) {
 list(
$r,$g,$b)=$c;
 
$v=max($r,$g,$b);
 
$t=min($r,$g,$b);
 
$s=($v==0)?0:($v-$t)/$v;
 if (
$s==0)
 
$h=-1;
 else {
 
$a=$v-$t;
 
$cr=($v-$r)/$a;
 
$cg=($v-$g)/$a;
 
$cb=($v-$b)/$a;
 
$h=($r==$v)?$cb-$cg:(($g==$v)?2+$cr-$cb:(($b==$v)?$h=4+$cg-$cr:0));
 
$h=60*$h;
 
$h=($h<0)?$h+360:$h;
 }
 return array(
$h,$s,$v);
}

// $c = array($hue, $saturation, $brightness)
// $hue=[0..360], $saturation=[0..1], $brightness=[0..1]
function hsv2rgb($c) {
 list(
$h,$s,$v)=$c;
 if (
$s==0)
  return array(
$v,$v,$v);
 else {
 
$h=($h%=360)/60;
 
$i=floor($h);
 
$f=$h-$i;
 
$q[0]=$q[1]=$v*(1-$s);
 
$q[2]=$v*(1-$s*(1-$f));
 
$q[3]=$q[4]=$v;
 
$q[5]=$v*(1-$s*$f);
 
//return(array($q[($i+4)%5],$q[($i+2)%5],$q[$i%5]));
 
return(array($q[($i+4)%6],$q[($i+2)%6],$q[$i%6])); //[1]
 
}
}
?>

[1] - EDITOR NOTE: THIS IS A FIX FROM "hc at hob(removethis)soft dot net".
2004-11-28 06:58:43
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
This will let you tint an image to any specific color. The blacks of the source image become your specified color, and the whites remain white. Works best for colorizing greyscale images. 

<?php

$r 
224;
$g 192;
$b 0;
$source_file "picture.jpg";

$im_src ImageCreateFromJpeg($source_file);
$im_tint ImageCreate(imagesx($im_src),imagesy($im_src));
for (
$c 0$c 255$c++) {
     
ImageColorAllocate($im_tintmax($r,$c), max($g,$c), max($b,$c));
}
ImageCopyMerge($im_tint,$im_src,0,0,0,0imagesx($im_src), imagesy($im_src), 100);
ImageDestroy($im_src);

header("Content-type: image/jpeg");
imagejpeg($im_tint);

?>
2004-12-22 04:10:49
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
When you are using truecolor images, you can also use bitwise operations to generate the color:
<?php
$color 
= ($r << 16) | ($g << 8) | $b// 2261213
?>
This is identical to the imagecolorallocate() function, in truecolor images!
2005-01-18 16:23:40
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
<?php

/**
 * Create a image bar using lib GD
 * Ege. <img src="color_sample.php?color=FF0000" width="10 height="30">
 */

// Split the HTML color representation
$hexcolor str_split($_GET["color"], 2); 

// Convert HEX values to DECIMAL
$bincolor[0] = hexdec("0x{$hexcolor[0]}");
$bincolor[1] = hexdec("0x{$hexcolor[1]}");
$bincolor[2] = hexdec("0x{$hexcolor[2]}");

$im ImageCreate(100100);
$colorallocate ImageColorAllocate($im$bincolor[0], $bincolor[1], $bincolor[2]);
ImageFilledRectangle($im00100100$colorallocate);
header('Content-Type: image/png');
ImagePNG($im);

?>
2005-03-15 13:34:31
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
hsl to RGB
(not yet optimized but it function)

<?php
function hslToRgb ($h$s$l) {
    if (
$h>240 || $h<0) return array(0,0,0);
    if (
$s>240 || $s<0) return array(0,0,0);
    if (
$l>240 || $l<0) return array(0,0,0);     
    if (
$h<=40) {
       
$R=255;
       
$G=(int)($h/40*256);
       
$B=0;
    }
    elseif (
$h>40 && $h<=80) {
       
$R=(1-($h-40)/40)*256;
       
$G=255;
       
$B=0;
    }
    elseif (
$h>80 && $h<=120) {
       
$R=0;
       
$G=255;
       
$B=($h-80)/40*256;
    }
    elseif (
$h>120 && $h<=160) {
       
$R=0;
       
$G=(1-($h-120)/40)*256;
       
$B=255;
    }
    elseif (
$h>160 && $h<=200) {
       
$R=($h-160)/40*256;
       
$G=0;
       
$B=255;
    }
    elseif (
$h>200) {
       
$R=255;
       
$G=0;
       
$B=(1-($h-200)/40)*256;
    }
   
$R=$R+(240-$s)/240*(128-$R);
   
$G=$G+(240-$s)/240*(128-$G);
   
$B=$B+(240-$s)/240*(128-$B);
    if (
$l<120) {
       
$R=($R/120)*$l;
       
$G=($G/120)*$l;
       
$B=($B/120)*$l;
    }
    else {
       
$R=$l*((256-$R)/120)+2*$R-256;
       
$G=$l*((256-$G)/120)+2*$G-256;
       
$B=$l*((256-$B)/120)+2*$B-256;
    }
    if (
$R<0$R=0;
    if (
$R>255$R=255;
    if (
$G<0$G=0;
    if (
$G>255$G=255;
    if (
$B<0$B=0;
    if (
$B>255$B=255;
   
    return array((int)
$R,(int)$G,(int)$B);
}
?>
2005-06-08 09:38:58
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
This nifty function will produce the negative of a given image!

<?php

/********************************

     Code by Kailash Nadh
     http://kailashnadh.name

     usage:
     img2neg("my_pic.jpg");

*********************************/

function img2neg($pic) {

   
header("Content-type: image/jpeg");

   
$source=imagecreatefromjpeg($pic);    // Source
   
$width=imagesx($source);    $height=imagesy($source);

   
$im imagecreatetruecolor($width$height);    // Our negative img in the making

   
for($y=0$y $height$y++) {
        for(
$x=0$x $width$x++) {

       
$colors=imagecolorsforindex($sourceimagecolorat($source$x,$y));

           
// this is what makes the colors negative
           
$r=255-$colors['red'];
           
$g=255-$colors['green'];
           
$b=255-$colors['blue'];
           
$test=imagecolorallocate($im$r,$g,$b);
           
imagesetpixel($im,$x$y$test);
        }
    }

   
imagejpeg($im);
   
imagedestroy($im);
}

?>
2005-06-28 10:47:30
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Here's a very simple and very effective code to change a HEX color to RGB.

<?php
function HEX2RGB($color){
 
$color_array = array();
 
$hex_color strtoupper($color);
 for(
$i 0$i 6$i++){
 
$hex substr($hex_color,$i,1);
  switch(
$hex){
   case 
"A"$num 10; break;
   case 
"B"$num 11; break;
   case 
"C"$num 12; break;
   case 
"D"$num 13; break;
   case 
"E"$num 14; break;
   case 
"F"$num 15; break;
   default: 
$num $hex; break;
  }
 
array_push($color_array,$num);
 }
 
$R = (($color_array[0] * 16) + $color_array[1]);
 
$G = (($color_array[2] * 16) + $color_array[3]);
 
$B = (($color_array[4] * 16) + $color_array[5]);
 return array(
$R,$G,$B);
 unset(
$color_array,$hex,$R,$G,$B);
}
?>
2005-10-06 15:05:20
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
Another more general variation on the theme using the same naming conventions as the hexdec and dechex built-in functions ...

Prototype:

array hexrgb ( string hex_string )

Returns:

An associative array of the RGB components specified in hex_string.

hexrgb() example:

<?php
$rgb 
hexrgb("0xAABBCC");
print_r($rgb);
?>

Output is:

Array
(
  [red] => 170
  [green] => 187
  [blue] => 204
)

Implementation:

<?php
function hexrgb ($hexstr)
{
 
$int hexdec($hexstr);

  return array(
"red" => 0xFF & ($int >> 0x10),
               
"green" => 0xFF & ($int >> 0x8),
               
"blue" => 0xFF $int);
}
?>

The output of hexdec can then be passed to imagecolorallocate and manipulated as required.
2005-11-15 03:49:46
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
This works! A Black-Image with vertical centered white Aliased Arial-Text and same left and right margin - used for Menu-Buttons.

<?php

 
function createImgText ($string=""$fontsize=0$marginX=0$imgH=$fontfile=""$imgColorHex=""$txtColorHex=""){
    if(
$string!=""){
       
Header("Content-type: image/png");     
       
//
       
$spacing 0;
         
$line = array("linespacing" => $spacing);
       
$box = @imageftbbox($fontsize,0,$fontfile,$string,$line)
        or die(
"ERROR");
       
$tw=$box[4]-$box[0]; //image width
       
$marginY $imgH - (($imgH $fontsize) / 2);
       
$imgWidth $tw + (2*$marginX);
       
$im ImageCreate($imgWidth$imgH); 
       
$int hexdec($imgColorHex);
       
$arr = array("red" => 0xFF & ($int >> 0x10),
               
"green" => 0xFF & ($int >> 0x8),
               
"blue" => 0xFF $int);
       
$black ImageColorAllocate($im$arr["red"], $arr["green"], $arr["blue"]); 
       
$int hexdec($txtColorHex);
       
$arr = array("red" => 0xFF & ($int >> 0x10),
               
"green" => 0xFF & ($int >> 0x8),
               
"blue" => 0xFF $int);
       
$white ImageColorAllocate($im$arr["red"], $arr["green"], $arr["blue"]); 
       
ImageFtText($im$fontsize0$marginX$marginY$white$fontfile$string, array()); 
       
ImagePng($im); 
       
ImageDestroy($im);
    }else{
        echo 
"ERROR!";
    }
}
createImgText ("Hello World"91018"arial.ttf""000000""FFFFFF");
?>
2006-01-13 16:00:05
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Also, when you need more then 256 colors, use imagecreatetruecolor function. With this function you can use unlimited number of colors.
2006-08-27 04:56:31
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Another solution to color limitation issues when creating gradients. This file takes width (px) and left and right colors (hex) and makes a gradient while only allocating 250 colors.

<?php
$leftR 
hexdec(substr($_GET["left"],0,2));
$leftG hexdec(substr($_GET["left"],2,2));
$leftB hexdec(substr($_GET["left"],4,2));
$rightR hexdec(substr($_GET["right"],0,2));
$rightG hexdec(substr($_GET["right"],2,2));
$rightB hexdec(substr($_GET["right"],4,2));
$image=imagecreate($_GET["width"],1);
for(
$i=0;$i<250;$i++) {
   
$colorset[$i] = imagecolorallocate($image$leftR + ($i*(($rightR-$leftR)/250)), $leftG + ($i*(($rightG-$leftG)/250)), $leftB + ($i*(($rightB-$leftB)/250)));
}
for(
$i=0;$i<($_GET["width"]);$i++) {
 
imagesetpixel ($image$i0$colorset[(int)($i/($_GET["width"]/250))] );
}
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
?>

example: gradient.php?width=640&left=000000&right=FF0000

Makes a 640px-wide image that fades from black to red.
2007-06-13 11:15:46
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
Lots of hsv2rgb commentary but no working example, so here's mine:

<?php // hsv2rgb example translated from ImageMagick C code
function hsv2rgb($h$s$v
{
   
$s /= 256.0;
    if (
$s == 0.0) return array($v,$v,$v);
   
$h /= (256.0 6.0);
   
$i floor($h);
   
$f $h $i;
   
$p = (integer)($v * (1.0 $s));
   
$q = (integer)($v * (1.0 $s $f));
   
$t = (integer)($v * (1.0 $s * (1.0 $f)));
    switch(
$i) {
    case 
0: return array($v,$t,$p);
    case 
1: return array($q,$v,$p);
    case 
2: return array($p,$v,$t);
    case 
3: return array($p,$q,$v);
    case 
4: return array($t,$p,$v);
    default: return array(
$v,$p,$q);
    }
}

$image ImageCreateTrueColor(256,128);
for (
$y=0$y<64$y++) for($x=0$x<256$x++){
    list(
$r,$g,$b) = hsv2rgb($x 7,255,($y*4) |7);
   
$color = ($r << 16 ) | ($g << 8) | $b;
   
imagesetpixel($image$x$y-4$color);
}
for (
$y=64$y<128$y++) for($x=0$x<256$x++){
    list(
$r,$g,$b) = hsv2rgb($x|7,((127-$y)*4)|7,255);
   
$color = ($r << 16) | ($g << 8) | $b;
   
imagesetpixel($image$x$y-4$color);
}
for (
$y=120$y<128$y++) for($x=0$x<256$x++){
   
$color = (($x |7) << 16) | (($x |7) << 8) | ($x |7);
   
imagesetpixel($image$x$y$color);
}
header("Content-Type: image/png");
imagepng($image);
?>
2007-09-28 19:15:10
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Автор:
When working on an existant GIF images, if the number of different colours has reached the limits of the GIF format, imagecolorallocate will not use to the colour you ask her within the parameters, she will apply black !

That's a problem when generating images "on-the-fly" with many manipulations, from a GIF image.
To go round the problem, you have to convert the GIF image into a PNG one, and then you can work on the PNG and everything will be ok.

For example :
<?php
// first, convert into a PNG image
$handle imagecreatefromgif('my_image.gif');
imagepng($handle'my_image.png');
imagedestroy($handle);

// then, you can work on it
$handle imagecreatefrompng('my_image.png');
/*
* work on the image
*/
imagegif($handle);
?>
2007-10-24 17:35:40
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
Note that you can only assign 255 colors to any image palette.  If you try assigning more, imagecolorallocate() will fail.

If, for example, you are randomly allocating colors, it will be wise to check if you have used up all of the colors possible.  You can use imagecolorclosest() to get the closest assigned color:
<?php
     
//assign random rgb values
     
$c1 mt_rand(50,200); //r(ed)
     
$c2 mt_rand(50,200); //g(reen)
     
$c3 mt_rand(50,200); //b(lue)
     //test if we have used up palette
     
if(imagecolorstotal($pic)>=255) {
         
//palette used up; pick closest assigned color
         
$color imagecolorclosest($pic$c1$c2$c3);
     } else {
         
//palette NOT used up; assign new color
         
$color imagecolorallocate($pic$c1$c2$c3);
     }
?>

Also, imagecolorallocate() will assign a new color EVERY time the function is called, even if the color already exists in the palette:
<?php
     
// [...]
     
imagecolorallocate($pic,125,125,125); //returns 5
     
imagecolorallocate($pic,125,125,125); //returns 6
     
imagecolorallocate($pic,125,125,125); //returns 7
     // [...]
     
imagecolorallocate($pic,125,125,125); //returns 23
     
imagecolorallocate($pic,125,125,125); //returns 25
     // [...]
     // etc...
?>

So here, imagecolorexact() is useful:
<?php
     
//see if color already exists
     
$color imagecolorexact($pic$c1$c2$c3);
     if(
$color==-1) {
         
//color does not exist; allocate a new one
         
$color imagecolorallocate($pic$c1$c2$c3);
     }
?>

And, for nerdy-ness sake, we can put the two ideas together:
<?php
     
//assign random rgb values
     
$c1 mt_rand(50,200); //r(ed)
     
$c2 mt_rand(50,200); //g(reen)
     
$c3 mt_rand(50,200); //b(lue)
     //get color from palette
     
$color imagecolorexact($pic$c1$c2$c3);
     if(
$color==-1) {
         
//color does not exist...
          //test if we have used up palette
         
if(imagecolorstotal($pic)>=255) {
               
//palette used up; pick closest assigned color
               
$color imagecolorclosest($pic$c1$c2$c3);
          } else {
               
//palette NOT used up; assign new color
               
$color imagecolorallocate($pic$c1$c2$c3);
          }
     }
?>

Or as a function:
<?php
     
function createcolor($pic,$c1,$c2,$c3) {
         
//get color from palette
         
$color imagecolorexact($pic$c1$c2$c3);
          if(
$color==-1) {
               
//color does not exist...
               //test if we have used up palette
               
if(imagecolorstotal($pic)>=255) {
                   
//palette used up; pick closest assigned color
                   
$color imagecolorclosest($pic$c1$c2$c3);
               } else {
                   
//palette NOT used up; assign new color
                   
$color imagecolorallocate($pic$c1$c2$c3);
               }
          }
          return 
$color;
     }

     for(
$i=0$i<1000$i++) { //1000 because it is significantly greater than 255
          //assign random rgb values
         
$c1 mt_rand(50,200); //r(ed)
         
$c2 mt_rand(50,200); //g(reen)
         
$c3 mt_rand(50,200); //b(lue)
          //generate the color
         
$color createcolor($pic,$c1,$c2,$c3);
         
//do something with color...
     
}
?>
2009-11-24 18:55:36
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
If you even in a situation where it's not allocating the color you want it could be because of your images color allocation table. GIF and 8-bit PNG images are very susceptible to this.

If your using an GIF and PNG try dropping a color from the table, should let you allocate another.
2010-12-08 21:52:40
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html
you have VERY limited space for color indexes (255 indexes on my system, with over 10 GB ram available, cli, no memory limit), when there is no more indexes available, imagecolorallocate will return false. when you create 2x indexes with the same r/g/b, you waste this very limited space. the function below should never fail, AND never waste any color index space. if there's already an index with the rgb, it will return the existing index, else it will try allocate 1, in the event that allocation fail (presumably because all index space is used up already), it will return the closest match to what you requested, and warn you via $couldFindExact.

function myimagecolorallocate($gd,int $red,int $green,int $blue,bool &$couldFindExact=null):int{
    $ret=imagecolorexact($gd, $red, $green, $blue);
    if($ret===-1){
        $ret=imagecolorallocate($gd, $red, $green, $blue);
        if($ret===false){
            $couldFindExact=false;//out of color indexes (255 index by default..wish i knew why)
            $ret=imagecolorclosest($gd, $red, $green, $blue);
        } else {
            $couldFindExact=true;
        }
    } else {
        $couldFindExact=true;
    }
    return $ret;
}
2016-03-14 11:30:51
http://php5.kiev.ua/manual/ru/function.imagecolorallocate.html

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