Volker: Die Funktion header() innerhalb eines Dokuments

Beitrag lesen

Hallo zusammen.
ich wende mich mit einem recht komplexen Problem an euch, da ich nicht mehr weiterkomme.

Situation:
Ich habe eine Galerie, in der ein jeweiliges einzelnes Bild groß dargestellt wird. Dieses wird mittels eines Parameters an eine Funktion wasserzeichen($param) übergeben, die ein Wasserzeichen auf dieses Bild kopiert und dann unabhängig vom Ursprungsformat (hier angenommen, es ist eine jpeg-Datei) eine png-Datei ausgibt.

  
<?php  
function wasserzeichen ($bild) {  
 // Bild laden  
 $bild = imagecreatefromjpeg($bild);  
 $wasserzeichen = imagecreatefrompng('adresse/wasserzeichen.png');  
 // Header setzten  
 header("Content-type: image/png");  
 // Bild Infos  
 $width = imagesx($bild);  
 $height = imagesy($bild);  
 // Bilder erzeugen  
 $img = imagecreatetruecolor($width, $height);  
 // Bild einfügen  
 imagecopy($img, $bild, 0, 0, 0, 0, $width, $height);  
 // Wasserzeichen einfügen  
 imagealphablending($img, TRUE);  
 imagecolortransparent($wasserzeichen, imagecolorat($wasserzeichen, 0, 0));  
 imagecopymerge ($img, $wasserzeichen, $width-295, $height-28, 0, 0, 285, 18, 50);  
 // Bild anzeigen  
 imagepng($img);  
 return $img;  
 // Speicher freigeben  
 imagedestroy($img);  
}  
?>  

Nun ist es ja so, dass ich die Funktion nicht einfach in einer PHP-Datei an der benötigten Stelle mit
echo "<img src="".wasserzeichen($bildadresse)."" alt="Bild" />"
aufrufen kann, da header() seine Arbeit nicht verrichten kann, wenn vorher schon HTML-code per
echo "..."
ausgegeben wurde.

Meine Idee: Ha, kein Problem, ich modifiziere die Funktion wasserzeichen() so, dass ich vor der Ausgabe von HTML-code eine png-Datei erzeuge, und diese kann ich dann an benötigter Stelle wie gewünscht bearbeiten und als Bild mit Wasserzeichen ausgeben...

Rufe ich jetzt aber Anfang des PHP-Dokuments
$wasserzeichenbild = wasserzeichen("0");
mit der modifizierten version von wasserzeichen() auf:

  
<?php  
function wasserzeichen ($bild) {  
 if ($bild == "0") {  
  // Header setzten  
  header("Content-type: image/png");  
  // Bilder erzeugen  
  $img = imagecreatetruecolor(10, 10);  
  // Bild anzeigen  
  imagepng($img);  
  return $img;  
  // Speicher freigeben  
  imagedestroy($img);  
 } else { ... }  
}  

... dann erscheint bei mir die png-Grafik im Browser und nicht der darauf folgende Quelltext, _obwohl_ ich doch eigentlich einer Variable, die ein Bild beinhaltet, den header zugewiesen habe!?
Anscheinend gilt die header()-Angabe jedoch dann für das gesamte PHP-Dokument.

Wie löse ich also das resultierende Problem:
Ich will eine png-Grafik dynamisch erstellen, in dem ich mitten in einem PHP-Dokument die Funktion wasserzeichen(..) aufrufe, die aus zwei Einzelbildern ein Neues erstellt und mit return ausgibt.

Möglicherweise ist die Lösung trivial, aber ich stecke mit dem Kopf so tief drin, dass ich scheitere :-.
Ich hoffe, ich habe alle Details ausreichend erläutern können.
Danke im Voraus für Hilfe.

Gruß, Volker