Dynamische Bilder

Hallo!
Ich habe mich in letzter Zeit mit dynamischen Bildern (image-Funktionen) in PHP beschäftigt. Das klapt soweit auch ganz gut, allerdings möchte ich mir jetzt z.B. einen Avatar basteln. Das Problem ist, das die Endung *.php nicht als Bildformat anerkannt wird. Kann ich das irgendwie in eine *.jpg oder *.gif umwandeln?
Wie z.B. bei http://www.danasoft.com/sig/test.jpg

Moien

Das Problem ist, das die Endung *.php nicht als
Bildformat anerkannt wird. Kann ich das irgendwie in eine
*.jpg oder *.gif umwandeln?

Man muss dem Server halt sagen dass .jpg eine Endung von php ist. Das macht man z.B. bei apache in http.conf mit der Zeile:

AddType application/x-httpd-php .jpg

cu

Aha - Danke schonmal. Aber der Server gehört leider nicht mir, also kann ich das wohl auch nicht einstellen. Gibt es vieleicht noch eine andere Möglichkeit?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

manche Foren und bulletinboards kann man austricksen

einfach ein ?dummy=file.jpg dranhängen und schon wird es als Bild akzeptiert - nicht immer aber manchmal…

manche Foren und bulletinboards kann man austricksen

einfach ein ?dummy=file.jpg dranhängen und schon wird es als
Bild akzeptiert - nicht immer aber manchmal…

Ja, bei einigen Foren klappt das wirklich - Vielen Dank!
Hat noch jemand ne Idee, was ich bei den anderen mache?

Hallo Toni,

es gibt noch eine etwas exotische Methode, die ich eigentlich sehr interessant finde. HTML unterstützt das direkte Einbinden von Grafiken in den Quelltext. Nachteil ist, das nicht jeder Browser sowas kann, obwohl es dem Standard entspricht.
Das sieht dann etwa so aus

//////////////////////////////////////////////////////////////////////////////
//Ein Bild als Embedded Image in die Seite direkt einlagern
function Image\_Embed($image)
{
//Imageausgabe abfangen indem ich den Outputbuffer umleite
ob\_start();

//Aus dem Image ein PNG machen
//dabei wird automatisch in den Outputbuffer geschrieben
if (ImagePNG($image))
{
//Wenn alles funktioniert hat, das Image aus dem Buffer holen
//und base64 kodieren
$imagestring=Base64\_Encode(ob\_get\_contents());

//Und Image-Tag ausgeben
echo "\n";
}

//Puffer löschen, um keine Quatsch auszugeben
ob\_end\_clean();


//Speicher freigeben
unset($imagestring);
unset($image);
}

war jetzt so aus dem Kopf, sollte baer eigentlich funktionieren.
Firefox unterstützt es auf jeden Fall, IE weiß ich nicht.

Ciao

Sven

http://www.machina.ch

Hallo Toni,

es gibt noch eine etwas exotische Methode, die ich eigentlich
sehr interessant finde. HTML unterstützt das direkte Einbinden
von Grafiken in den Quelltext. Nachteil ist, das nicht jeder
Browser sowas kann, obwohl es dem Standard entspricht.

Versteh ich das jetzt richtig, dass ich ein Bild einbinde in dem ich z.B. Image_Embed(‚bild.jpg‘) aufrufe?Wenn ja, dann muss ich doch trotzdem eine PHP-Datei in die Signatur einbinden, oder seh ich da was falsch?

An der Stelle, an der das Bild in der HTML-Seite auftauchen soll,
rufst Du einfach die Funktion auf.
als z.B

Mein Text mit <?php>Image_Embed(PNG_From_File(‚bla.png‘)) Bild

PNG-From-File heißt anders, weiß aber grade nicht wie. Einfach mal in die Doku schauen

Ciao

Sven

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Mein Text mit

<?php>

php öffnet man mit bzw <?php :Image_Embed

das gibts in der Form nicht

(PNG_From_File(‚bla.png‘))

vermutlich meinst Du imagecreatefrompng()?

php schliesst man mit
?>

im prinzip hätte ich auch gerne gewusst wie das geht aber naja - mir hilft Deine Antwort nix…

Und jetzt im ganzen Satz…
Hallo,

hier nochmal meine Idee zu dem Problem.
Du willst ein dynamisch erzeugtes Bild in Deine Webseite einbinden ?

Dazu erzeugst Du einfach ein Image-Object (z.B. indem Du eine Grafik von der Platte öffnest).

Du baust Deine Webseite mit deinem Script ganz normal auf.
An der Stelle, an welcher Deine Grafik erscheinen soll fügst Du keinen Image-Tag nach dem Muster ein sondern rufst einfach die Funktion Image_Embed auf. Dadurch wird das Bild nicht extern nachgeladen (hier tritt das Problem mit dem JPG auf) sondern direkt in den Quelltext eingebunden.

Der Browser liest das Bild aus dem HTML-Code und stellt es dann dar.
Daher ist die Endung der Datei unwichtig.

Hier nochmal ein kompletter Quelltext :

//Hier lade ich mein Bild
$image=imagecreatefrompng("image.png");

//////////////////////////////////////////////////////////////////////////////
//Ein Bild als Embedded Image in die Seite direkt einlagern
function Image\_Embed($image)
 {
 //Imageausgabe abfangen indem ich den Outputbuffer umleite
 ob\_start();

 //Aus dem Image ein PNG machen
 //dabei wird automatisch in den Outputbuffer geschrieben
 if (ImagePNG($image))
 {
 //Wenn alles funktioniert hat, das Image aus dem Buffer holen
 //und base64 kodieren
 $imagestring=Base64\_Encode(ob\_get\_contents());

 //Puffer löschen, um keine Quatsch auszugeben
 ob\_end\_clean();

 //Und Image-Tag ausgeben
 echo "\<img src=\x22data:image/png;base64,".$imagestring."\x22 /\>\n";
 }
 else
 {
 ob\_end\_clean();
 }

 //Speicher freigeben
 unset($imagestring);
 unset($image);
 }

echo "Dies ist der Text vor dem Bild";

Image\_Embed($image);

echo "Dies ist der Text nach dem Bild";

Hallo,

Ja, bei einigen Foren klappt das wirklich - Vielen Dank!
Hat noch jemand ne Idee, was ich bei den anderen mache?

http://example.com/script.php/bild.jpg

Das Script sollte natürlich auch image/gif bzw. image/jpeg zurückliefern. Das /bild.jpg sollte irgendwo in $_SERVER[„PATH_INFO“] sogar abfragbar sein…

Alexander

1 Like

Hallo,

hier nochmal meine Idee zu dem Problem.
Du willst ein dynamisch erzeugtes Bild in Deine Webseite
einbinden ?

Es geht nicht um meine Webseite, sondern darum, dass ich in einem Forum eine dynamische Signatur einbinden möchte. Und da sind als Dateiendungen nur Bildformate erlaubt. Und Scripte kann ich da leider überhaupt nicht einbinden.

Uuups,

dann habe ich wohl die Frage etwas mißverstanden.

Sorry

Sven

Dynamische Bilder (Die Lösung)

http://example.com/script.php/bild.jpg

Das Script sollte natürlich auch image/gif bzw. image/jpeg
zurückliefern. Das /bild.jpg sollte irgendwo in
$_SERVER[„PATH_INFO“] sogar abfragbar sein…

Alexander

Hey, das funktioniert ja wirklich! Vielen Dank, damit wäre mein Problem gelöst!