imagecolorset

(PHP 4, PHP 5, PHP 7)

imagecolorset Установка набора цветов для заданного индекса палитры

Описание

void imagecolorset ( resource $image , int $index , int $red , int $green , int $blue [, int $alpha = 0 ] )

Эта функция устанавливает соответствие индекса в палитре заданному цвету. Это полезно для создания эффекта подобного заливке цветом без осуществления заливки.

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

image

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

index

Индекс в палитре.

red

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

green

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

blue

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

alpha

Значение альфа компонента.

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

Эта функция не возвращает значения после выполнения.

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

Версия Описание
5.4.0 Добавлен аргумент alpha.

Примеры

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

<?php
// Создание изображения размером 300x100 
$im imagecreate(300100);

// Установка красного цвета фона
imagecolorallocate($im25500);

// Получение индекса цвета фона
$bg imagecolorat($im00);

// Установка синего цвета фона
imagecolorset($im$bg00255);

// Вывод изображения в броузер
header('Content-Type: image/png');

imagepng($im);
imagedestroy($im);
?>

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

  • imagecolorat() - Получение индекса цвета пиксела

Коментарии

This function change colors of an image with ranges 0>100 for each primary color:

int ImageSelectiveColor (int im, int red, int green, int blue)

im is image pointer
red, green and blue are ranges 0->100

function ImageSelectiveColor($im,$red,$green,$blue)
 {
  for($i=0;$i<imagecolorstotal($im);$i++)
   {
    $col=ImageColorsForIndex($im,$i);
    $red_set=$red/100*$col['red'];
    $green_set=$green/100*$col['green'];
    $blue_set=$blue/100*$col['blue'];
    if($red_set>255)$red_set=255;
    if($green_set>255)$green_set=255;
    if($blue_set>255)$blue_set=255;
    imagecolorset($im,$i,$red_set,$green_set,$blue_set);
   
   }
  return $im;
 
 }
2001-07-11 20:49:55
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
here's a simple function to greyscale an image...

function imagecolorgrey( &$img ) {
 for( $i=0; $i<imagecolorstotal( $img ); $i++ ) {
  $c = ImageColorsForIndex( $img, $i );
  $t = ($c["red"]+$c["green"]+$c["blue"])/3;
  imagecolorset( $img, $i, $t, $t, $t );   
 }
}
2002-08-08 17:20:29
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
here's a function to greyscale an image even from a truecolor source (jpeg or png).

slightly poor quality, but very fast...

function imagegreyscale(&$img, $dither=1) {   
    if (!($t = imagecolorstotal($img))) {
        $t = 256;
        imagetruecolortopalette($img, $dither, $t);   
    }
    for ($c = 0; $c < $t; $c++) {   
        $col = imagecolorsforindex($img, $c);
        $min = min($col['red'],$col['green'],$col['blue']);
        $max = max($col['red'],$col['green'],$col['blue']);
        $i = ($max+$min)/2;
        imagecolorset($img, $c, $i, $i, $i);
    }
}
2004-04-23 12:19:41
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
this is helpful if you would like to implement a color theme system in your website... try it out
Davide Candiloro Italy

function colorize ($pngpath, $r, $g, $b) 
/*
REQUIRES: $pngpath to be a valid path of a greyscale PNG-8 image with 64 colors palette
          $r, $g, $b to be integers in the range 0..255
EFFECTS: returns the png image colorized with the color represented by $r, $g, $b.
*/
{
    header("Content-type: image/png");
    $im = imagecreatefrompng("images/table.png");

    imagetruecolortopalette($im, FALSE, 256); 
   
      for ($c = 0; $c < 64; $c++){ /*64 is the number of colors in the PNG-8 palette*/
        $col = imagecolorsforindex($im, $c);           
        imagecolorset ( $im, $c, $r*$col['red']/256, $g*$col['green']/256, $b*$col['blue']/256); /*replaces original greyscale palette with a colorized one*/
     }

    imagepng($im);
    imagedestroy($im);
}
2004-10-02 16:47:29
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
Автор:
If you want to convert a Color image to Grayscale without creating a blotchy image, use this color calculation:
<?php
function imagetograyscale($im)
{
    if (
imageistruecolor($im)) {
       
imagetruecolortopalette($imfalse256);
    }

    for (
$c 0$c imagecolorstotal($im); $c++) {
       
$col imagecolorsforindex($im$c);
       
$gray round(0.299 $col['red'] + 0.587 $col['green'] + 0.114 $col['blue']);
       
imagecolorset($im$c$gray$gray$gray);
    }
}
?>
2006-10-04 18:59:21
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
Here is a function to turn an image into pure black and white

<?php

function imagepurebw$img$amount 383 ) {
   
$total imagecolorstotal$img );
    for ( 
$i 0$i $total$i++ ) {
       
$index imagecolorsforindex$img$i );
       
array_pop$index );
       
$color = ( array_sum$index ) > $amount ) ? 255 0;
       
imagecolorset$img$i$color$color$color );
    }
}

?>
2007-08-25 14:37:47
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
I've been looking for a simple function which "colorizes" an image, without any success ... it looks like a lot of people mean something different with "colorizing" an image, because actually colorzing means multiplying the old color's grayscale with the new color. So a white pixel would become 100% of the colorize-to-color and a black pixel would stay black (I know I can't explain well ... I hope you understood, otherwise take a look at the example below the functions' code).

<?php
function image_colorize(&$img,$rgb) {
 
imageTrueColorToPalette($img,true,256);
 
$numColors imageColorsTotal($img);

  for (
$x 0$x $numColors$x++) {
    list(
$r,$g,$b) = array_values(imageColorsForIndex($img,$x));

   
// calculate grayscale in percent
   
$grayscale = ($r $g $b) / 0xff;

   
imageColorSet($img,$x,
     
$grayscale $rgb[0],
     
$grayscale $rgb[1],
     
$grayscale $rgb[2]
    );
  }

  return 
true;
}
?>

Example of usage:
<?php
$color 
= array(0xff,0xaa,0x2a); // color to convert to
$url 'http://sundog.net/images/uploads/1_google_logo.jpg';
$img imageCreateFromJpeg($url);

image_colorize($img,$color);

header('Content-type: image/gif');
imageGif($img);
exit;
?>

Enjoy
2008-02-20 03:08:33
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
Автор:
Here is a function to colorize a picture gradient style.

All you have to do is to pass an img-object and an array of colors.

e.g.

$arr = array('#000000', '#990000', '#00FFFF', '#FFFFDD');
colorize ($img, $arr);

<?php
function colorize($imgdata$palette)
{
   
imageTrueColorToPalette($imgdata,false,0xFF);
   
$l count($palette)-1;
   
$i imagecolorstotal($imgdata);
    while (
$i--)
    {
        list(
$r,$g,$b) = array_values(imageColorsForIndex($imgdata,$i));
       
       
$grayscale = ($r*.3 $g*.59 +$b*.11) / 0xFF;
       
       
$pos $l*$grayscale;
       
       
$perc $pos-floor($pos);
       
       
$tbase str_replace("#"''$palette[$pos]);
       
$baseR hexdec(substr($tbase,0,2));
       
$baseG hexdec(substr($tbase,2,2));
       
$baseB hexdec(substr($tbase,4,2));
       
       
$tmix str_replace("#"''$palette[$pos+1]);
       
$mixR hexdec(substr($tmix,0,2));
       
$mixG hexdec(substr($tmix,2,2));
       
$mixB hexdec(substr($tmix,4,2));
       
       
$resR $baseR+($mixR-$baseR)*$perc;
       
$resG $baseG+($mixG-$baseG)*$perc;
       
$resB $baseB+($mixB-$baseB)*$perc;
       
       
imagecolorset($imgdata$i$resR$resG$resB);
    }
}
?>
2008-04-23 13:42:34
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
Автор:
I had the same problem as heavyraptor2 so i made this function...
<?php
function imagecolorize($im,$endcolor){
   
//funcion takes image and turns black into $endcolor, white to white and
    //everything in between in corresponding gradient
    //$endcolor should be 6 char html color

    //make sure it has usable palette
   
if (imageistruecolor($im)) {
       
imagetruecolortopalette($imfalse256);
    }

   
//first make it gray to be sure of even results (thanks moxleystratton.com)
    //comment this loop if you want the output based on, for example, 
    //the red channel (for this take a look at the $gray-var in the last loop)
   
for ($c 0$c imagecolorstotal($im); $c++) {
       
$col imagecolorsforindex($im$c);
       
$gray round(0.299 $col['red'] + 0.587 $col['green'] + 0.114 $col['blue']);
       
imagecolorset($im$c$gray$gray$gray);
    }

   
//determine end-colors in hexdec
   
$EndcolorRGB['r'] = hexdecsubstr($endcolor02));
   
$EndcolorRGB['g'] = hexdecsubstr($endcolor22));
   
$EndcolorRGB['b'] = hexdecsubstr($endcolor42));

   
//determine gradient-delta's
   
$stepR = (255-$EndcolorRGB['r'])/255.0;
   
$stepG = (255-$EndcolorRGB['g'])/255.0;
   
$stepB = (255-$EndcolorRGB['b'])/255.0;

   
//aColor contains the 256 gradations between endcolor(i=0) and white(i=255)
   
$aColor = array();
    for (
$i 0$i<=255$i++){
       
$aColor[$i]['r'] = $EndcolorRGB['r'] + ($i*$stepR);
       
$aColor[$i]['g'] = $EndcolorRGB['g'] + ($i*$stepG);
       
$aColor[$i]['b'] = $EndcolorRGB['b'] + ($i*$stepB);
    }

   
//for every color-index we now replace $gray-values for $aColor
   
for ($c 0$c imagecolorstotal($im); $c++){
       
$currentColorRGB imagecolorsforindex($im$c);
       
$gray $currentColorRGB['red'];//image is grayscale, so red,green and blue
        // should be equal. We use this number as key of aColor
       
imagecolorset($im,$c,(int)$aColor[$gray]['r'], (int)$aColor[$gray]['g'], (int)$aColor[$gray]['b']);
    }
}
?>
2009-08-25 05:12:07
http://php5.kiev.ua/manual/ru/function.imagecolorset.html
Автор:
If you are creating a palette image from scratch you have to use imagecolorallocate() for each index before you can use imagecolorset() on it.
2015-07-01 16:25:43
http://php5.kiev.ua/manual/ru/function.imagecolorset.html

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