PHP dynamisches Bild als Funktion im Quelltext
Christian Tank
- php
0 dedlfix-3 pl0 dedlfix
0 Tabellenkalk0 Gunnar Bittersmann
Hallo,
ich möchte per PHP ein dynamisches Bild on-the-fly erzeugen. Das funktioniert, sofern ich das in einer eigenen Datei erledige. Ich möchte die Erstellung des Bildes (aus Effizienzgründen) als Funktion in den übrigen Quelltext integrieren; So etwa:
$bild="<img src=\"".dynmaischesbild()."\">";
function dynamischesbild(){
header ("Content-type: image/png");
$bild = imagecreate (400 , 50);
imagecolorallocate ($bild, 0, 0, 0);
$text_farbe = ImageColorAllocate ($bild, 255, 255, 0);
ImageString ($bild, 4, 0, 0, "Hallo Welt", $text_farbe);
ImagePNG ($bild);}
Irgendwo müsste ich aus der Funktion per return einen Dateinamen zurücksenden. Wie genau mache ich das?
Danke für die Hilfe...
Tach!
ich möchte per PHP ein dynamisches Bild on-the-fly erzeugen. Das funktioniert, sofern ich das in einer eigenen Datei erledige. Ich möchte die Erstellung des Bildes (aus Effizienzgründen) als Funktion in den übrigen Quelltext integrieren;
Das geht nicht direkt (abgesehen von Inline-Data). Das Bild ist ein eigenständiger Request und der muss unabhängig vom einbettenden Dokument betrachtet und programmtechnisch umgesetzt werden. Du kannst das im selben Script machen, musst das dann aber über Parameter steuern, ob Dokument oder (ausschließendes oder) Bild ausgegeben werden soll.
Irgendwo müsste ich aus der Funktion per return einen Dateinamen zurücksenden. Wie genau mache ich das?
Du kannst natürlich auch das Bild im Dateisystem ablegen, aber wenn es nach dem Abruf nicht mehr gebraucht wird, hast du eventuell dieses Zwischenablage zu verwalten, weil da dann auch gern mal unabgefragte Leichen zurückbleiben.
dedlfix.
Moin,
ich erinnere mich, vor langer Zeit mal mit Inline-Bildern innerhalb einer HTML-Datei experimentiert zu haben. Sowas ist ja aus Mails bekannt und beginnt so:
--------------Boundary-00=_4OSTSPT1VA4000000000
Content-Type: image/gif;
name="ape.gif"
Content-Transfer-Encoding: base64
Content-ID: <2D083BC3-5D83-4B35-A366-475DE7D41911>
R0lGODlhhwC8AOYAAIehwfz9/fHCwpiltoKaubiGhui4uNimpqp3d6Stu32WtPvMzK64xbmWliMd
Das Bild ist also Bestandteil der HTML-Datei und muss nicht von einer URL abgerufen werden.
Linuchs
Tach!
ich erinnere mich, vor langer Zeit mal mit Inline-Bildern innerhalb einer HTML-Datei experimentiert zu haben. Sowas ist ja aus Mails bekannt und beginnt so:
Prinzipiell geht sowas, aber ein HTML-Dokument ist nicht Multipart-Mail.
--------------Boundary-00=_4OSTSPT1VA4000000000 Content-Type: image/gif; name="ape.gif" Content-Transfer-Encoding: base64 Content-ID: <2D083BC3-5D83-4B35-A366-475DE7D41911> R0lGODlhhwC8AOYAAIehwfz9/fHCwpiltoKaubiGhui4uNimpqp3d6Stu32WtPvMzK64xbmWliMd
Das Bild ist also Bestandteil der HTML-Datei und muss nicht von einer URL abgerufen werden.
So gehts jedenfalls nicht. Bei Inline-Bildern befindet sich deren Code im src-Attribut vom img-Element, oder auch im CSS. Wie es wirklich geht? Weiß ich nicht, aber Dokumentationen zu Inline-Images lassen sich garantiert finden.
dedlfix.
Hallo,
Prinzipiell geht sowas,
Ein Miguel Vitorino hat einen Kommentar in der PHP-Doku für Exif-Thumbnails hinterlassen, wie er das vor 8 Jahren realisiert hat.
Gruß
Kalk
@@dedlfix
So gehts jedenfalls nicht. Bei Inline-Bildern befindet sich deren Code im src-Attribut vom img-Element, oder auch im CSS. Wie es wirklich geht? Weiß ich nicht, aber Dokumentationen zu Inline-Images lassen sich garantiert finden.
<img src="data:image/gif;base64,R0lGODlhhwC8AOYAAIehwfz9/fHCwpiltoKaubiGhui4uNimpqp3d6Stu32WtPvMzK64xbmWliMd" alt="ape"/>
(Die Beispieldaten hab ich aus dem Posting übernommen ohne zu prüfen, ob das wirklich GIF-Bilddaten sind.)
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hallo,
Beispieldaten ohne zu prüfen
ne, tut nicht.
Aber
<img src="data:image/gif;base64,R0lGODlhEQANAJEDAJmZmf///wAAAP///yH5BAHoAwMALAAAA
AARAA0AAAItnIGJxg0B42rsiSvCA/REmXQWhmnih3LUSGaqg35vF
bSXucbSabunjnMohq8CADsA" alt="file"/>
tut's bei mir
Gruß
Kalk
Hallo,
Gibts auch im Wiki
ups, vergessen erst dort zu suchen...
Was ist in dem ersten Satz des zweiten Kapitels
„Wenn Sie die Grafiken nicht im HTML, sondern in das CSS einbinden, können Sie dies umgehen, da die CSS-Datei normalerweise schon in Cache vorgeladen ist.“
mit „dies“ gemeint?
Gruß
Kalk
Hallo
Was ist in dem ersten Satz des zweiten Kapitels
„Wenn Sie die Grafiken nicht im HTML, sondern in das CSS einbinden, können Sie dies umgehen, da die CSS-Datei normalerweise schon in Cache vorgeladen ist.“
mit „dies“ gemeint?
Ich vermute, dieses „dies“ bezieht sich auf das „Beachten Sie“ des vorherigen Abschnittes.
„Beachten Sie: Gerade Firmenlogos oder öfter verwendete Symbole werden aber nicht immer wieder neu übertragen, sondern aus dem Cache aufgerufen. Dieser Vorteil geht hier verloren.“
„Wenn Sie die Grafiken nicht im HTML, sondern in das CSS einbinden, können Sie dies umgehen, da die CSS-Datei normalerweise schon in Cache vorgeladen ist. “
Das ist aber in der Tat eine beschissene Formulierung, da wohl die Wenigsten davon ausgehen, dass hier ein Bezug auf den davorliegenden Seitenteil hergestellt wird. Erst recht gilt das, wenn man von woanders direkt zu diesem Abschnitt springt. Eine passende Formulierung, die ohne Bezug auf den vorigen Abschnitt auskommt, ohne dabei auszuufern, fällt mir aber auf die Schnelle auch nicht ein.
Tschö, Auge
Hallo Auge,
Das ist aber in der Tat eine beschissene Formulierung, da wohl die Wenigsten davon ausgehen, dass hier ein Bezug auf den davorliegenden Seitenteil hergestellt wird. Erst recht gilt das, wenn man von woanders direkt zu diesem Abschnitt springt. Eine passende Formulierung, die ohne Bezug auf den vorigen Abschnitt auskommt, ohne dabei auszuufern, fällt mir aber auf die Schnelle auch nicht ein.
„Wenn Sie Grafiken im HTML als Data-URI referenzieren, werden diese nicht im Cache vorgehalten, wie es bei einer Grafik der Fall wäre. Die Grafik muss also für jede Seite, auf der sie benötigt, wird neu übertragen werden, solange sich nicht das HTML-Dokument selbst im Cache befindet.
Wenn Sie die Grafiken in eine externe CSS-Ressource einbinden, können Sie erreichen, dass auch diese Grafiken als Bestandteil der CSS-Ressource nur einmal übertragen werden müssen.“ Grafiken mit Data-URI
Bis demnächst
Matthias
Hallo
„Wenn Sie Grafiken im HTML als Data-URI referenzieren, werden diese nicht im Cache vorgehalten, wie es bei einer Grafik der Fall wäre. Die Grafik muss also für jede Seite, auf der sie benötigt, wird neu übertragen werden, solange sich nicht das HTML-Dokument selbst im Cache befindet.
Wenn Sie die Grafiken in eine externe CSS-Ressource einbinden, können Sie erreichen, dass auch diese Grafiken als Bestandteil der CSS-Ressource nur einmal übertragen werden müssen.“ Grafiken mit Data-URI
Oder so.
Kleine (schon erfolgte) Ergänzung: „… werden diese nicht im Cache vorgehalten, wie es bei einer Grafikdatei der Fall wäre.“
Tschö, Auge
Hi,
Kleine (schon erfolgte) Ergänzung: „… werden diese nicht im Cache vorgehalten, wie es bei einer Grafikdatei der Fall wäre.“
ressource - der Browser kann nicht feststellen, ob die Ressource aus einer Datei stammt oder von einem Script generiert oder sonstwie erzeugt wurde.
cu,
Andreas a/k/a MudGuard
Hallo
Kleine (schon erfolgte) Ergänzung: „… werden diese nicht im Cache vorgehalten, wie es bei einer Grafikdatei der Fall wäre.“
ressource - der Browser kann nicht feststellen, ob die Ressource aus einer Datei stammt oder von einem Script generiert oder sonstwie erzeugt wurde.
Grundsätzlich korrekt, aber im Browsercache, auf den sich der fragliche Satz bezieht, liegt tatsächlich eine Datei. Und ist die Ressource nicht nur auf dem Server eine Ressource?
Tschö, Auge
Moin,
ich erinnere mich, vor langer Zeit mal mit Inline-Bildern innerhalb einer HTML-Datei experimentiert zu haben. Sowas ist ja aus Mails bekannt und beginnt so:
--------------Boundary-00=_4OSTSPT1VA4000000000 Content-Type: image/gif; name="ape.gif" Content-Transfer-Encoding: base64 Content-ID: <2D083BC3-5D83-4B35-A366-475DE7D41911> R0lGODlhhwC8AOYAAIehwfz9/fHCwpiltoKaubiGhui4uNimpqp3d6Stu32WtPvMzK64xbmWliMd
Das Bild ist also Bestandteil der HTML-Datei und muss nicht von einer URL abgerufen werden.
Auch ein data: URL ist ein URL und seit Jahren gibt es auch den blob: als URL.
Siehe auch RFC2397
Hallo,
$bild="<img src=\"".dynmaischesbild()."\">";
Na dann guck mal in die einschlägigen RFC was in src= stehen darf. Auf keinen Fall der Name einer Funktion.
MfG
Tach!
$bild="<img src=\"".dynmaischesbild()."\">";
Na dann guck mal in die einschlägigen RFC was in src= stehen darf. Auf keinen Fall der Name einer Funktion.
Wo steht da im Ergebnis ein Funktionsname?
dedlfix.
Hallo,
Zusammenfassung:
$bild="<img src=\"".dynmaischesbild()."\">";
Hier müsstest du natürlich den korrekten Funktionsnamen angeben, es reicht nicht, dass er etwa so ähnlich ist.
function dynamischesbild(){
...
Irgendwo müsste ich aus der Funktion per return einen Dateinamen zurücksenden.
Du gibst mit return
keinen Dateinamen zurück, sondern direkt die kodierten Daten.
Gruß
Kalk
@@Christian Tank
$bild="<img src=\"".dynmaischesbild()."\">";
Der Alternativtext fehlt.
Außerdem ist es i.a.R. besser, Markup nicht mit PHP zu generieren, sondern PHP ins Markup einzubinden. So ungefähr:
<img src="<?php dynmaischesbild(); ?>" alt="<?php echo ImageString(); ?>"/>
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|