phpbar.de logo

Mailinglisten-Archive

[php] Grafikproblem (Ebenen)

[php] Grafikproblem (Ebenen)

Thilo Wagner st001892_(at)_hrz1.hrz.tu-darmstadt.de
Fri, 5 Jan 2001 16:32:23 +0100


Hallo Liste!

Ich habe hier folgendes Problem: 

Der Benutzer soll sich eine Grafik anzeigen lassen können, die aus 
mehreren Ebenen besteht. Konkret handelt es sich um eine ca. 
500x500 Pixel große Landkarte mit mehreren Layern. In der einen 
Ebene befinden sich die Strassen, in der zweiten die Städte usw. 

Der Benutzer soll nun mit Checkboxen auswähen, welche Ebenen 
er sehen will und welche nicht (z.B. nur Autobahnen aber keine 
Landstraßen). Nach drücken eines Buttons werden dann vom php-
Script die gewünschten Ebenen übereinander gelegt und so die 
Karte generiert und ausgegeben. 

Die einzelnen Ebenen (max. 10) habe ich als jeweils eigenständige 
500x500 Pixel große GIF-Dateien vorliegen. Der naive Ansatz wäre 
nun, in jeder Ebene eine Farbe, z.B. weiss, als Transparent zu 
nehmen. Von der untersten Ebene ausgehend werden nun 
nacheinander alle Ebenen geladen und die nichttransparenten Pixel 
mit ineinander geschachtelten Schleifen in die Zielgrafik kopiert 
(Beispiel aus dem Kopf getippt und so nicht getestet): 

for ($nr=$maxebene;$nr>0;$nr--) {  // Alle Ebenen durchgehen
 if ($ebenegewuenscht[$nr]) {  // Soll Ebene verwendet werden?   
  for ($x=0; $x<$breite; $x++) {
    for ($y=0; $y<$hoehe; $y++) {
     $farbe = ImageColorAt($ebene[$nr], $x, $y); 
     if ($farbe !=  $transparent) ImageSetPixel($zielbild,$x,$y,$farbe);
     // Nichttransparente Pixel rüberkopieren
    }
   }
 }
}

Man könnte natürlich alle möglichen Kombinationen schon 
vorberechnen lassen und dann als einzelne Grafiken abspeichern, 
aber das ist eben nicht das, was ich will (und z.B. bei 10 Ebenen 
auch ein nicht machbarer Aufwand). Das Script wird wohl nicht 
sehr oft aufgerufen, wahrscheinlich max. 1-2 mal pro Tag, es 
braucht also nicht so unheimlich optimiert zu sein, aber irgendeine 
effektivere Möglichkeit muss es doch trotzdem geben...?

ciao.. Thilo


php::bar PHP Wiki   -   Listenarchive