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