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:
<?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(300, 300, 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.