Karte dynamisch erstellen

neuni

Mitglied
HI, ich würde gerne eine Karte von PHP erstellen lassen. Also einfach nen brauner Hintergrund und da dann je nach den Koordinaten kleine Kästchen drauf, die die Städte darstellen. Hab schoün mal geguckt und das gefunden:

PHP:
<?
header("Content-type: image/png");
$im = imagecreate(500,500);
$braun = ImageColorAllocate($im,201,107,63);
ImageFilledRectangle($im,0,0,200,100,$braun);

$rot = ImageColorAllocate($im,216,52,48);
ImageFilledRectangle($im,200,250,50,50,$rot);

imagepng($im); 
?>
Wenn ich das jetzt aber so mache fängt der rote kasten nicht bei 200|250 an und ist 50x50 groß, sondern er fängt bei 50|50 an und ist 200x250 groß...wenn ich die werte jetzt einfach vertausche gehts auch nich :(

Hoffe ihr könnt schnell helfen!
 
Achso....in meiner stands anders..naja, danke.

Ach eins noch (gehört ja direkt dazu): Kann ich auch anstatt ein neues Bild zu erstellen mit imagecreate(150, 30); ein vorhandenes Bild laden und darauf dann die punkte zeichnen?
 
Ja, aber da habe ch jetzt das gefunden:
PHP:
function LoadJpeg ($imgname) {
   $im = @ImageCreateFromJPEG ($imgname); /* Versuch, Datei zu öffnen */
   if (!$im) {                            /* Prüfen, ob fehlgeschlagen */
       $im = ImageCreate (150, 30);      /* Erzeugen eines leeren Bildes */
       $bgc = ImageColorAllocate ($im, 255, 255, 255);
       $tc  = ImageColorAllocate ($im, 0, 0, 0);
       ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc);
       /* Ausgabe einer Fehlermeldung */
       ImageString($im, 1, 5, 5, "Fehler beim Öffnen von: $imgname", $tc);
   }
   return $im;
};

LoadJpeg ("karte.jpg");
Damit geht das auch das bild zu laden, aber wie gebe ich das bild jetzt aus?
Muss das dann
PHP:
header("Content-type: image/jpg"); heißen?
Und dann die Ausgabe mit
PHP:
imagejpg($im);

Sorry, aber ich versteh das einfach nicht :( Kann mir nicht einfach einer eben nen beispiel geben? Will nur das bild lade, nen rechteck drauf machen und ausgeben :(
 
Die Karte muss nicht unbedingt eine jpg-Datei sein, du kannst auch bei PNG bleiben und [phpf]imagecreatefrompng[/phpf] verwenden:

PHP:
<?php
$img = @imagecreatefrompng('karte.png');
if ($img == false) {
     // Wenn das Bild nicht geladen werden konnte, Fehlermeldung ausgeben und abbrechen 
     die('Das angegebene Bild konnte nicht geladen werden.');
}
// Ansonsten:
// header manipulieren
header('Content-type: image/png');
// Farbe definieren
$color['brown'] = imagecolorallocate($img, 201, 107, 63);
// Rechteck zeichnen
imagefilledrectangle($img, 50, 50, 75, 75, $color['brown']);
// Bild ausgeben
imagepng($img);
?>

Ich hoffe das hilft dir.

Gruß
Marvin
 
PHP:
<?
function RectOnJpeg($file,$x,$y,$size=50,$col="")
{
   if($col=="") // Col angegeben?
     $col=array("255","255","255"); //Nein, also Col auf weis setzten
   $im=ImageCreateFromJPEG ($file) or Die("Konnte Bild nicht öffnen!<br>"); //Bild öffnen
   $color=ImageColorAllocate($col[0],$col[1],$col[2]); // Farbe einstellen
   ImageFilledRectangle ($im, $x, $y, ($x+$size), ($y+$size), $color); //Rechteck erstellen
   header('Content-type: image/png'); // Headers setzten
   imagepng($im); // Bild ausgeben
}
//Aufrufen:
RectOnJpeg("img/bild.jpg",200,250,50,array("255","0","0"));
?>
Die Datei in der das steht musst du als source im <img> angeben wenn du es irgentwie verwenden willst! Also:
<img src="diedatei.php">

Hoffe ich konnte helfen;)
 
Hi Neuni,

habe erst vor einer Woche eine Funktion geschrieben, die 2 versch. Kreise für 8 verschiedene Städte malt. Als Hintergrund habe ich au eine D-Karte. Falls Du Hilfe brauchst, meld Dich. ;)
 
Punkte in Karte einzeichnen

Problem: Ich bekomme die Koordinaten aus meiner MySQL-DB nicht ins Bild gezeichnet.
Die Datei, in die das "PHP-Bild" als <img> eingebettet ist, enthält folgenden Code:

PHP:
<? 
$coords = array();
$result = mysql_query("SELECT koordinaten FROM db");
while($row = mysql_fetch_array($result)) {
	$koordinaten = explode(",",$row[koordinaten]); // Bsp.: $row[koordinaten] = "212,192"
	array_push($coords,intval($koordinaten[0]));
	array_push($coords,intval($koordinaten[1]));
} 
?>

^-- halt das Array mit den Integer-Koordinaten drin...

In der bild.php sollen nun auf eine Grafik "karte.png" Kreise bei den Koordinaten aus dem Array gezeichnet werden:

PHP:
<?php
$im = imagecreatefrompng("karte.png");
$schwarz = imagecolorallocate ($im, 0, 0, 0);

$i = 0;
while ( $i<count($coords) ) {
	$x = $coords[$i];
	$y = $coords[$i+1];
	imagefilledellipse($im,$x,$y,5,5,$schwarz);
	$i = $i+2;
}

header("Content-Type: image/jpeg");
imagejpeg($im,'',100);
imagedestroy ($im);
?>

...was ohne das Array mit den Werten aus der MySQL-DB auch super funktioniert. (Also wenn ich $coords = array(x1,y1,x2,y2...) in der bild.php definiere.)

Vorher hatte ich es schon damit probiert, die MySQL-Abfrage direkt in der bild.php laufen zu lassen und hatte dann eben in der while-Schleife (s.o.):
PHP:
<?php ... {
$koordinaten = explode(",",$row[koordinaten]);
imagefilledellipse($im,$koordinaten[0],$koordinaten[1],5,5,$schwarz);
}
?>

Beide Versionen brachten mich zum selben Ergebnis: die Grafik blieb stur und ließ sich partout nicht mit meinen Punkten bemalen. Was nun?
 
Zuletzt bearbeitet von einem Moderator:
Zurück