Enrico: Noch einmal alles von Anfang an...

Beitrag lesen

Herrschaftszeiten, ich bin noch nicht ganz fit!

Jetzt alles noch einmal von vorne:

Ich möchte von einem übergebenen transparenten Bild den Umriss in Koordinatenform für eine Image Map "poly" ermitteln.

Hier der Code:

$Bild = "../GRAFIKEN/SORTIMENT/GewandungMuetzen3.png";  
  
Koordinaten_ermitteln ($Bild);  
  
function Koordinaten_ermitteln ($Bild)  
{  
   $Grafik = $Bild;  
  
   echo '<map id="map' . preg_replace ("/[^0-9]/", "", $Bild) . '" name="map' . preg_replace ("/[^0-9]/", "", $Bild) . '">'  
         . '<area href="" shape="poly" coords="';  
  
   $Bild = imagecreatefrompng ($Bild);  
  
   $Breite = imagesx ($Bild);  
   $Hoehe  = imagesy ($Bild);  
  
   $Halbes_Bild = round ($Breite / 2);  
  
   for ($x = $Halbes_Bild + 1; $x < $Breite; $x++)  
   {  
      for ($y = 0; $y < $Hoehe; $y++)  
      {  
         $RGBA_aktueller_Pixel  = imagecolorat ($Bild, $x, $y);  
         $Farbe_aktueller_Pixel = $RGBA_aktueller_Pixel["alpha"];  
  
         if ($x < $Breite - 1)  
         {  
            $RGBA_naechster_Pixel  = imagecolorat ($Bild, $x + 1, $y);  
            $Farbe_naechster_Pixel = $RGBA_naechster_Pixel["alpha"];  
         }  
         else  
            $Farbe_naechster_Pixel = false;  
  
         if ($Farbe_aktueller_Pixel != 0 && ($Farbe_naechster_Pixel && $Farbe_naechster_Pixel == 0))  
            echo $x . ", " . $y;  
  
         if ($x < $Breite - 1)  
            echo ", ";  
      }  
   }  
  
   for ($x = 0; $x < $Halbes_Bild; $x++)  
   {  
      for ($y = 0; $y < $Hoehe; $y++)  
      {  
         $RGBA_aktueller_Pixel  = imagecolorat ($Bild, $x, $y);  
         $Farbe_aktueller_Pixel = $RGBA_aktueller_Pixel["alpha"];  
  
         $RGBA_naechster_Pixel  = imagecolorat ($Bild, $x + 1, $y);  
         $Farbe_naechster_Pixel = $RGBA_naechster_Pixel["alpha"];  
  
         if ($Farbe_aktueller_Pixel != 0)  
            echo $x . ", " . $y . "<br>";  
         else  
            if  ($Farbe_aktueller_Pixel == 0 && $Farbe_naechster_Pixel != 0)  
               echo ($x + 1) . ", " . $y;  
  
         if ($x < $Halbes_Bild - 1)  
            echo ", ";  
      }  
   }  
  
   echo '">'  
   . '<img src="' . $Grafik . '" usemap="#map' . preg_replace ("/[^0-9]/", "", $Bild) . '">';  
}

Leider werden mir aber keine Koordinaten ausgegeben.

Ich vermute die Ursache, warum keine Koordinaten ausgegeben werden, beim Durchlaufen der rechten Bildhälfte in der Abfrage

if ($Farbe_aktueller_Pixel != 0 && ($Farbe_naechster_Pixel && $Farbe_naechster_Pixel == 0))  
   echo $x . ", " . $y;

bzw. beim Durchlaufen der linken Bildhälfte in der Abfrage

if ($Farbe_aktueller_Pixel != 0)  
   echo $x . ", " . $y;  
else  
   if  ($Farbe_aktueller_Pixel == 0 && $Farbe_naechster_Pixel != 0)  
      echo ($x + 1) . ", " . $y . "<br>";

Zum ersten Durchlauf:

Ist die Farbe des aktuellen Pixels nicht transparent und (gibt es einen darauffolgenden Pixel und ist dieser transparent), dann gebe die Koordinaten aus.

Zum zweiten Durchlauf (bezogen auf korrigierten Code):

Ist die Farbe des aktuellen Pixels nicht transparent, dann gebe die Koordinaten aus.
Anderenfalls gebe die Koordinaten des drauffolgenden Pixels aus, wenn die Farbe des aktuellen Pixels transparent und die Farbe des darauffolgenden Pixels nicht transparent ist.

Da meine Grafiken nur außen transparent sind, müsste das funktionieren, was es aber nicht tut, es werden mir keine Koordinaten ausgegeben.

Gruß,
Enrico