dyamisch gen. Bild als Teil von Seite darstellen
Matthias
- php
Hallo,
bei diesem Code
$image = imagecreatefromjpeg("image.jpg");
wird das Bild "image.jpg" in PHP "eingelesen", ich könnte es jetzt ganz einfach ausgeben.
Jedoch möchte ich es in einer html-Seite ausgeben (also <img src...)..
Was muss ich da als URL eintragen? image.jpg geht nicht, weil das eingelesene Bild dynamisch in meinem Script noch verändert wird...
Weiß jemand Rat?
MfG MAtthias
PS: Ist die Grafik (image.jpg) dann eigentlich vorgeladen, also würde sie, wenn ich sie im folgenden Script ganz normal mit "<img src..." einbinden würde nicht nochmal geladen werden müssen?
Hallo Matthias,
wird das Bild "image.jpg" in PHP "eingelesen", ich könnte es jetzt ganz einfach ausgeben.
Jedoch möchte ich es in einer html-Seite ausgeben (also <img src...)..
Was muss ich da als URL eintragen? image.jpg geht nicht, weil das eingelesene Bild dynamisch in meinem Script noch verändert wird...
Alternative 1: http://aktuell.de.selfhtml.org/artikel/grafik/inline-images/index.htm
Alternative 2: Du brauchst 2 PHP-Scripte: Eines, dass die Seite erzeugt, und ein anderes, das das Bild modifiziert. Dasjenige, dasdie Seite erzeugt, gibt das zweite Script als Quelle für das Bild an. Das zweite Script muss dann halt noch einen korrekten Header senden.
Alternative 3: Du speicherst das Ergebnis zwischen und verlinkst dann die zwischengespeicherte Graphikdatei.
PS: Ist die Grafik (image.jpg) dann eigentlich vorgeladen, also würde sie, wenn ich sie im folgenden Script ganz normal mit "<img src..." einbinden würde nicht nochmal geladen werden müssen?
Wenn die URL die gleiche ist und korrekte Caching-Header gesendet werden: ja.
Viele Grüße,
Christian
Hi,
danke erstmal für die Lösungsansätze, jetzt müsste ich es hinkriegen :-)
Wenn die URL die gleiche ist und korrekte Caching-Header gesendet werden: ja.
Was müsste ich denn im header angeben?
Danke &
Mfg Matthias
Hallo Matthias,
Wenn die URL die gleiche ist und korrekte Caching-Header gesendet werden: ja.
Was müsste ich denn im header angeben?
Vorneweg: Das betrifft eigentlich unr Lösungsansatz 2.
Das PHP-Script, das das Bild ausgibt, darf auf *keinen* Fall einen Cache-Control: no-cache, Pragma: no-cache oder ähnliches senden.
Fangen wir mit dem Cache-Control-Header an. Dieser sollte so aussehen:
Cache-Control: private, max-age=3600, must-revalidate
Das 'private' bewirkt, dass kein Proxy das Bild cachen darf. Das max-age=3600 bewirkt, dass die Datei nicht länger als 3600 Sekunden im Browsercache bleiben darf. (Du darfst an dem Wert natürlich drehen) Das must-revalidate bewirkt, dass der Browser nach ablauf des max-age-Werts auch wirklich das Bild nocheinmal anfordert.
Nun brauchst Du noch eine Expires-Header. Dieser muss das Datum angeben, bei dem das Bild 'ausläuft', also der Browser es zwangsläufig nocheinmal anfordern _muss_:
Expires: Fri, 30 Oct 1998 14:19:41 GMT
Das Datum muss _exakt_ in diesem Format angegeben werden. Es sollte möglichst der gleiche Zeitpunkt wie 'aktuelle Zeit + die Angabe bei max-age' sein. Bei PHP dürften Dir die Funktionen gmdate() und time() dafür nützlich sein.
Noch etwas: Ich habe hier die Header so geschrieben, wie sie in der HTTP-Kommunikation dann auch aussehen; in PHP musst Du sie natürlich so erzeugen:
header ('Cache-Control', 'private, ...');
header ('Expires', '...');
Wenn Du das Bild zwischenspeicherst (Lösungsvorschlag 3) dann sollte der HTTP-Server sich automatisch um so etwas kümmern.
Viele Grüße,
Christian