Christian Tank: PHP dynamisches Bild als Funktion im Quelltext

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...

  1. 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.

    1. 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

      1. 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.

        1. 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

        2. @@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 🖖

          --
          “There’s no such thing as an ‘average’ user, but there is such a thing as an average developer.” —Vitaly Friedman in Accessibility Matters: Meet Our New Book, “Inclusive Design Patterns”
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
          1. 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

            1. Hallo Tabellenkalk,

              Gibts auch im Wiki: Grafik/Grafiken_mit_Data-URI

              Bis demnächst
              Matthias

              --
              Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
              1. 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

                1. 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

                  --
                  Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
                  Wolfgang Schneidewind *prust*
                  1. 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

                    --
                    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
                    1. 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

                      --
                      Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
                      Wolfgang Schneidewind *prust*
                      1. 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

                        1. 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

                          --
                          Wo wir Mängel selbst aufdecken, kann sich kein Gegner einnisten.
                          Wolfgang Schneidewind *prust*
      2. 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

  2. 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

    --
    Ein ​Netzwerk ​dessen ​Betreiber ​Millionenprofite ​einstreichen, ​als ​Soziales ​Netzwerk ​zu ​bezeichnen, ​ist ​eine ​Demütigung ​all ​derjenigen, ​die ​einst ​aus ​Überzeugung ​ihre ​Freizeit ​für ​den ​freien ​und ​demokratischen ​Geist ​des ​Medium ​Internet ​geopfert ​haben. Von ​diesem ​Geiste ​ist ​heute ​im ​Internet ​kein ​Hauch ​mehr ​zu ​spüren.
    1. 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.

  3. 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

  4. @@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 🖖

    --
    “There’s no such thing as an ‘average’ user, but there is such a thing as an average developer.” —Vitaly Friedman in Accessibility Matters: Meet Our New Book, “Inclusive Design Patterns”
    Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|