Sven Rautenberg: Ich will doch bloß eine Farbe in die Hand...

Beitrag lesen

Moin!

OK, ich versteh bloß Bahnhof.

Kann passieren. Ich erkläre dir mal, was in deinem Code passiert.

  

> <?php  
>   
> header( "Content-Type: image/gif" );  
>   
> // Bildattribute  
> $height = 40;  
> $width = 150;  
>   
> // Bild erzeugen  
> $pic = imagecreate( $width, $height );  

// Damit erzeugst du ein Palettenbild für GIF. Die Farbpalette ordnet einem Index (Wertebereich 0..255) eine RGB-Farbe (#000000 .. #FFFFFF) zu.  

>   
> // Farbwerte für Bildhintergrund  
> $r = rand(128, 255);  
> $g = rand(128, 255);  
> $b = rand(128, 255);  

// Hier ermittelst du eine Zufallsfarbe für den Hintergrund und speicherst sie ganz normal in drei Variablen.  

>   
> // Koordinaten der gestrichelten Linien  
> $dashed_x1 = $width - rand( 0, $width );  
> $dashed_y1 = 0;  
> $dashed_x2 = $dashed_x1 + 30;  
> $dashed_y2 = $height;  
>   
> // Farbe der gestrichelten Linien  
> $dashed_r = 255 - $r;  
> $dashed_g = 255 - $g;  
> $dashed_b = 255 - $b;  

// und hier ermittelst du die Farbe deiner Linien und speicherst sie ebenfalls in drei Variablen.  

> $dashed_color = /* HIER SOLL DIE FARBE ERMITTELT WERDEN */  

// Du ermittelst weiter oben doch auch keine Farbe für deinen Hintergrund - warum also plötzlich hier?  

>   
> // Hintergrundfarbe ausfüllen  
> $bgcol = imagecolorallocate( $pic, $r, $g, $b );  

// Hier füllst du die Farbpalette mit deiner Hintergrundfarbe. Und laut Dokumentation setzt der erste Funktionsaufruf GLEICHZEITIG auch noch die Hintergrundfarbe des Bildes, sofern man denn Palettenbilder benutzt (TrueColor-Bilder arbeiten anders).  
// Es fehlt noch, dass du auch deine Linienfarbe in diese Palette tust.  
// imagecolorallocate gibt dir dann jeweils den Palettenindex zurück, den du zum Zeichnen als "Farbe" angeben mußt.  

>   
> // gestrichelte Linien zeichnen  
> imagedashedline( $pic, $dashed_x1, $dashed_y1, $dashed_x2, $dashed_y2, $dashed_color );  

// Wenn du oben den Farbindex von indexcolorallocate in $dashed_color speicherst, verwendest du die oben angegebene RGB-Farbe für deine Linien.  

>   
> imagegif( $pic );  
>   
> imagedestroy( $pic );  
>   
> ?>  

Palettenbilder sind, wie du vielleicht merkst, etwas seltsamer zu behandeln, als man es vielleicht gewohnt ist. Du must dir mit imagecolorallocate() sozusagen einen "Tuschkasten" zusammensetzen. Die Tuschfarben können jeden beliebigen Farbwert annehmen, du sagst den Zeichenfunktionen danach dann aber nur noch, mit welcher Farbnummer in deinem numerierten Tuschkasten (mit auswechselbaren Tuschtöpfen) du jetzt malen willst.

Bonusfunktion: Der Farbwert, den du als allererstes in den Tuschkasten packst, bestimmt dir außerdem die Farbe deines Malpapieres. Was technisch simpel erklärt ist: Ein frisch angelegtes Bild hat für jeden Pixel erstmal "Farbindex 0" gespeichert, und wenn diesem Farbindex eine Farbe zugewiesen wird, ändert der gesamte Hintergrund eben auf einen Schlag die Farbe.

- Sven Rautenberg

--
My sssignature, my preciousssss!