note 62395 added to function.imagefilter

From: Date: Mon, 27 Feb 2006 19:37:34 +0000
Subject: note 62395 added to function.imagefilter
Groups: php.notes 
Request: Send a blank email to php-notes+get-104505@lists.php.net to get a copy of this message
A colorize algorithm wich preserves color luminosity (i.e black will output black, and white will output white). This works in PHP4 and is great for customizing interfaces dinamically. <?php function colorize($img_src,$img_dest, $r, $g, $b) { if(!$im = imagecreatefromgif($img_src)) return "Could not use image $img_src"; //We will create a monochromatic palette based on //the input color //which will go from black to white //Input color luminosity: this is equivalent to the //position of the input color in the monochromatic //palette $lum_inp=round(255*($r+$g+$b)/765); //765=255*3 //We fill the palette entry with the input color at its //corresponding position $pal[$lum_inp]['r']=$r; $pal[$lum_inp]['g']=$g; $pal[$lum_inp]['b']=$b; //Now we complete the palette, first we'll do it to //the black,and then to the white. //FROM input to black //=================== //how many colors between black and input $steps_to_black=$lum_inp; //The step size for each component if($steps_to_black) { $step_size_red=$r/$steps_to_black; $step_size_green=$g/$steps_to_black; $step_size_blue=$b/$steps_to_black; } for($i=$steps_to_black;$i>=0;$i--) { $pal[$steps_to_black-$i]['r']=$r-round($step_size_red*$i); $pal[$steps_to_black-$i]['g']=$g-round($step_size_green*$i); $pal[$steps_to_black-$i]['b']=$b-round($step_size_blue*$i); } //From input to white: //=================== //how many colors between input and white $steps_to_white=255-$lum_inp; if($steps_to_white) { $step_size_red=(255-$r)/$steps_to_white; $step_size_green=(255-$g)/$steps_to_white; $step_size_blue=(255-$b)/$steps_to_white; } else $step_size_red=$step_size_green=$step_size_blue=0; //The step size for each component for($i=($lum_inp+1);$i<=255;$i++) { $pal[$i]['r']=$r + round($step_size_red*($i-$lum_inp)); $pal[$i]['g']=$g + round($step_size_green*($i-$lum_inp)); $pal[$i]['b']=$b + round($step_size_blue*($i-$lum_inp)); } //--- End of palette creation //Now,let's change the original palette into the one we //created for($c = 0; $c < $palette_size; $c++) { $col = imagecolorsforindex($im, $c); $lum_src=round(255*($col['red']+$col['green'] +$col['blue'])/765); $col_out=$pal[$lum_src]; imagecolorset($im, $c, $col_out['r'], $col_out['g'], $col_out['b']); } //save the image file imagepng($im,$img_dest); imagedestroy($im); }//end function colorize ?> ---- Server IP: 194.153.94.11 Probable Submitter: 24.232.97.175 ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/function.imagefilter.php Edit -- http://master.php.net/note/edit/62395 Del: integrated -- http://master.php.net/note/delete/62395/integrated Del: useless -- http://master.php.net/note/delete/62395/useless Del: bad code -- http://master.php.net/note/delete/62395/bad+code Del: spam -- http://master.php.net/note/delete/62395/spam Del: non-english -- http://master.php.net/note/delete/62395/non-english Del: in docs -- http://master.php.net/note/delete/62395/in+docs Del: other reasons-- http://master.php.net/note/delete/62395 Reject -- http://master.php.net/note/reject/62395 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#104505) next »