php gd-Grafik mehrfach im div-Container ausgeben

rulf

Grünschnabel
Hallo, liebe Gemeinde.
Ich bin neu hier und bitte gleich mal um Entschuldigung für meine wahrscheinlich unnötige Frage (vorher 5 Tage gegoogelt und hier gesucht: ok)...aber ich sehe mittlerweile den Wald vor lauter Bäumen nicht.
Was bisher funktioniert: Ich erstelle mit der gd-Bibliothek eine relativ komplexe Grafik und fülle entsprechende Bereiche mit imagefilltoborder(). Die Farben lasse ich mit mt_rand() ermitteln. Die Ausgabe erfolgt direkt an den Client-Browser mit imagejpeg().
Im HTML-Code definiere ich dann einen Anker und mit <img src="gdgrafik.php"/> erzeugt jeder click auf die ausgegebene Grafik eine neue Grafik mit veränderten Farbwerten.
Ich möchte nun mit dem click mehrere Grafiken zeitversetzt im selben div-Container ausgeben lassen (um einen Farbwechsel-Effekt zu erzielen).
Mein Versuch, eine kleine Einbettung von php-Code in HTML, der wiederholt das gd-Grafik-File aufruft, gibt die generierten Grafiken farblich unterschieden, aber untereinander aus (vielleicht weil es hier ein Blockelement ist?).
Durch eine css-Formatierung erscheint die Grafik zwar innerhalb des Containers, aber anscheinend immer nur die letzte.
Hat jemand eine Idee (php, Cache, css, html)?
Vielen Dank fürs zuhören.
 
Hallo.

Poste doch mal deinen PHP/HTML Code.

HTML und CSS klingen schon einmal gut aber dazu müsste man halt mal den Code sehen.
 
Hallo bl5000.
Danke fürs Interesse. Hier kommen ein paar Code-Schnippsel:
HTML:
<div id="inhaltihom">
   <?php
     for ($s=0;$s<=3;$s++)
       {
       //erzeugt eine Zufallsfarbe zum übergeben
       $frn=mt_rand(82,152); 
       echo "<a href='index.php'>";
       echo"<img src='./images/gdgrafik02.php?fzahl=$frn' alt='gd erstelltes Muster' height='300' width='300'/></a>";
       //Zeitschleife für Verzögerung
       $z=0;
       for ($i=0;$i<=1000000;$i++)
         {
	 $z+=10;
	 }
       }
   ?>
</div>
'inhaltihom' ist ein Container im Container usw.
wenn ich
HTML:
       echo"<img src='./images/gdgrafik02.php?fzahl=$frn' alt='gd erstelltes Muster' height='300' width='300'/></a>";
als
HTML:
echo"<img class='gdgrafik' src='./images/gdgrafik02.php?fzahl=$frn' alt='gd erstelltes Muster' height='300' width='300'/></a>";
ausgeben lasse, wirkt die Klasse: die Grafiken werden an entsprechender Stelle ausgegeben, aber immer nur die Letzte (ohne class werden die Grafiken untereinander in unterschiedlichen Farben angezeigt (wie geplant)): aber bitte übereinander mit zeitlichem Versatz.
dazu die css-Formatierung
Code:
#inhaltihom {
position:absolute;top:0px;left:0px;width:300px;height:300px;
visibility:visible;display:block; 
}
.gdgrafik { 
position:absolute;top:0px;left:0px;visibility:visible;display:block;
}
img.gdgrafik { position:absolute;top:0px;left:0px;visibility:visible;display:block;
border:0px solid black;
}
img.gdgrafik:hover { position:absolute;top:-1px;left:-1px;visibility:visible;display:block;
border:1px solid yellow;
}
das php-File zum ausführen (gdgrafik02.php) gibt aus mit:
PHP:
.
//liesst die übergebene Variable ein
$fr1=$_GET['fzahl'];
//
$fgrau=imagecolorallocate($im,$fr1,$fg1,$fb1);
//
imagefilltoborder($im,$fix,$fiy,$fblack,$fgrau);
//
header("Content-Type:image/jpeg");   
imagejpeg($im);
imagedestroy($im);
irgendwo scheinbar das Problem, dass header nur einmal gesendet werden kann?!
 
Mit PHP und HTML allein bekommst du den Wechsel nicht hin. HTML ist statisch, d. h., wenn die Seite mal geladen wurde, ändert sie sich auch nicht mehr. Du kannst aber mit JavaScript zum Ziel kommen. Entweder lässt du das JS alle x Sekunden die gdgrafik.php noch mal aufrufen, oder du lädst gleich 5 Grafiken, von denen du nacheinander je eine mit JS sichtbar machst.

Viele Grüße,
Frezl
 
@Frezl
Danke für die Anteilnahme, aber ich will auf keinen Fall JS verwenden: meine Website kommt gänzlich ohne aus, und das soll auch so bleiben. Grund: möchte nur mit serverseitigen Scripts arbeiten, clientseitige Sprachen können entweder on oder off sein.
Meine Navigation z.B. folgt dem Verfahren bei einem 'hover' die entsprechende Grafik pixelversetzt anzuzeigen: wie ich denke ein durchaus dynamisches Element.
In diesem Sinne möchte ich auch meine gdgrafik generieren.
Danke
wiedermal gegoogelt: geht was mit ob_start(); ob_end_clean();?
 
Vll. kann dir AJAX dabei weiterhelfen, aber leider ist da mein Wissen auch nur begrenzt. Fiel mir nur ein bei dem Satz "Header nur einmal gesendet werden kann?!".

MfG Alaitoc
 
AJAX = JavaScript. Und ohne JavaScript oder etwas ähnlichem wirst du keine Animation aus Einzelbildern hinbekommen.

Es gibt in PHP irgendwie die Möglichkeit, eine Seite schrittweise auszuliefern, anstatt erst, wenn das Skript beendet ist. Aber das würde bedeuten, dass so lange der Rest der Seite fehlt, bis die Animation abgelaufen ist. Und abgesehen davon ist das, wie ne Dose mitm Schraubenzieher aufzumachen. Ist also keine echte Option.

Vielleicht findest ja auch nen Weg, wie man mit PHP ein animiertes GIF erstellen kann. Hab zwar noch nie sowas gesehn, aber technisch Möglich sollte es sein...

Viele Grüße,
Frezl
 
Zurück