DeutschEnglish

Untermenü

 - - - By CrazyStat - - -
Letzte Änderung:
24.10.2018 - 21:15:04

Farbverlauf erzeugen

Die folgende Funktion erzeugt einen Farbverlauf, wobei die Farbe von allen 4 Ecken festgelegt werden kann.
Beispiel eines von dieser Funktion generierten Farbverlaufes:

Beispiel-Farbverlauf


<?php

function gradient($w=100$h=100$c=array('#FFFFFF','#FF0000',
                            
'#00FF00','#0000FF'), $hex=true) {

 
/*
 Generates a gradient image

 Author: Christopher Kramer
 Website: http://www.christosoft.de/Tutorials/Farbverlauf
 
 Parameters:
 w: width in px
 h: height in px
 c: color-array with 4 elements:
    $c[0]:   top left color
    $c[1]:   top right color
    $c[2]:   bottom left color
    $c[3]:   bottom right color
   
 if $hex is true (default), colors are hex-strings like '#FFFFFF'
     (NOT '#FFF')
 if $hex is false, a color is an array of 3 elements which are the
    rgb-values, e.g.:  $c[0]=array(0,255,255);
 
 */
 
 
$im=imagecreatetruecolor($w,$h);
 
 if(
$hex) {  // convert hex-values to rgb
  
for($i=0;$i<=3;$i++) {
   
$c[$i]=hex2rgb($c[$i]);
  }
 }
 
 
$rgb=$c[0]; // start with top left color
 
for($x=0;$x<=$w;$x++) { // loop columns
  
for($y=0;$y<=$h;$y++) { // loop rows
   // set pixel color
   
$col=imagecolorallocate($im,$rgb[0],$rgb[1],$rgb[2]);
   
imagesetpixel($im,$x-1,$y-1,$col);
   
// calculate new color 
   
for($i=0;$i<=2;$i++) {
    
$rgb[$i]=
      
$c[0][$i]*(($w-$x)*($h-$y)/($w*$h)) +
      
$c[1][$i]*($x     *($h-$y)/($w*$h)) +
      
$c[2][$i]*(($w-$x)*$y     /($w*$h)) +
      
$c[3][$i]*($x     *$y     /($w*$h));
   }
  }
 }
 return 
$im;
}

function 
hex2rgb($hex) {
 
$rgb[0]=hexdec(substr($hex,1,2));
 
$rgb[1]=hexdec(substr($hex,3,2));
 
$rgb[2]=hexdec(substr($hex,5,2));
 return(
$rgb);
}

// usage example

$image=gradient(300300, array('#000000''#FFFFFF'
                
'#FF0000''#0000FF'));

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

?>

Man übergibt Breite, Höhe (in Pixeln) und die Farben der 4 Ecken. Es wird ein image handle zurück gegeben, welches den Farbverlauf (Gradient) enthält.
Der Farbverlauf kann direkt ausgegeben oder per imageecopy auf ein anderes Bild kopiert werden. Dies ist z.B. nützlich, um Schatten- oder Leucht-Effekte zu erzeugen. Für einen Leucht-Effekt erzeugt man z.B. 8 Farbverläufe, einen für jede Seite und einen für jede Ecke. Die Außenseiten der Verläufe haben die Hintergrundfarbe, die Innenseite eine helle Leuchtfarbe wie z.B. Weiß.

Achtung: Diese Funktion ist nicht auf Geschwindigkeit optimiert und wird evtl. bei großen Verläufen langsam. Für Schatten reicht es meist die Farbverläufe einmal zu generieren und dann als Datei auf dem Server zu cachen.

Hinweis: Für Farbverläufe empfehle ich unbedingt Truecolor. Wenn man den Verlauf auf ein anderes Bild kopiert, beim Erzeugen darauf achten, dass es ein truecolor-Bild ist.

Diese Funktion habe ich ursprünglich auf php.net veröffentlicht.