Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Imagehandler flexibel nutzen (Output: HTML / standalone / PDF / ...)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Imagehandler flexibel nutzen (Output: HTML / standalone / PDF / ...)

    Hallo Forum,

    kurze Frage zu meinem aktuellen Problem:
    Ich möchte Diagramme, die dynamisch über JPGraph erzeugt werden, für verschiedene Output-Kanäle nutzen.

    Mein erster Gedanke war daher, über die Skripte einen Imagehandler für die erstellten Diagramme zurückgeben zu lassen.
    Über den Imagehandler will ich dann das erstellte Diagramm in PDFs einbinden, oder das Diagramm in eine HTML-Seite einbinden.

    Habt ihr hierzu eine Lösung? Oder ist die Variante mit dem Image-Handler nicht "the way to go".

    Hintergrund war, den Code für die Diagrammerzeugung nur einmal schreiben und warten zu müssen, anstatt verschiedene Code-Fragmente mit demselben Inhalt anzulegen und zu pflegen.

    Bin für jeden Tipp dankbar.

  • #2
    Hallo,

    liefert dir JPGraph nicht sowieso schon einen Binarydump der Grafik oder eine Datei? Damit hast du ja schon dein "universelles" Format, oder?

    Gruß,
    Chriz

    Kommentar


    • #3
      Ja das ist der Way-To-Go.

      Ein ähnliches Problem wurde hier schon ( genau deinen Entsprechungen nach gelöst ):
      http://www.php.de/php-einsteiger/925...uf-server.html

      Kommentar


      • #4
        Mit JPGraph baut man sich ja eine Grafik (Image) auf, und entscheidet anschließend, was mit der Grafik passiert. In jedem Fall wird die Methode "Stroke()" aufgerufen, hier wird dann unterschieden:

        1. Kein Parameter = Bild wird direkt an den Browser zurückgegeben

        2. Parameter: <PFAD/DATEINAME> = Bild wird auf dem Server abgelegt

        3. Parameter: _IMG_HANDLER = ich erhalte einen Zeiger auf eine Image-Ressource.

        Aus mit Hilfe der Ressource füge ich momentan bspw. Bilder in PDFs ein, ohne jedoch Dateien auf dem Server speichern und später wieder löschen zu müssen.

        Vielleicht ist die Frage auch falsch gestellt.

        Ich suche momentan nach einem WEg, Bilder in HTML-Dateien einzufügen und möchte dazu auch gerne den Image-Handler benutzen, den ich aus meinem Skript bekomme, das mir mit Hilfe von JPGraph Diagramme generiert.

        Kommentar


        • #5
          Ja dann mach das doch, Bilder kann man "eingebettet" ebenfalls über den data:-wrapper innerhalb von HTML-Dokumenten anzeigen. Ich würde aber aufgrund von Cross-Browser-Tauglichkeit eine Redis-/memcache-Schnittstelle schaffen wo die Bilder gecached werden und diese über ein Wrapper-Script und einer festen ID für die generierten Bilder abholen, da du sonst die kompletten Bilddaten base64-bebläht im Source des Dokuments stehen hast. ( schränkt die Wartbarkeit ein, da der Source dadurch unheimlich unleserlich wird und etliches an Speicher in den hiesigen Dokument-Inspectoren verwendet. Interpoliert man das ganze jetzt auf 100 Graphen auf einer Seite, freut das den Dokument-Inspector nicht mehr ganz so ( laggy inc! ).

          Kommentar


          • #6
            Ich zitiere mal kurz aus dem (meinigen) anderen Thread:

            [...]du könntest das bild via ob_* abfangen und in php://memory zwischenspeichern[...]
            Ich speichere also das Bild im Arbeitsspeicher und hole es mir danach wieder heraus, bspw. bei der Erzeugung eines PDFs in welches das Bild eingebunden wird. Dies entspräche dann diesem beispielhaften Code:

            PHP-Code:
            $pdf->Image('php://memory'01100100'png'); 
            Wie würde der entsprechende Aufruf für das Einbetten des Bildes in einer HTML Seite aussehen? Etwa so?

            PHP-Code:
            echo "<img src="'.imagepng('php://memory', 0, 1, 100, 100, 'png').'" >"; 
            Da ich eher ein PHP-Neuling bin, gibt es Ressourcen (außer den entsprechenden Seiten zu Wrappern auf php.net, die sind etwas techy) im Netz wo man etwas in einer Art Tutorial zum Gebrauch der Streams nachlesen kann? Mein Erfahrungsgrad ist hier bisher = 0.

            Kommentar


            • #7
              Nein

              PHP-Code:
              ob_start();
              imagepng($jpgraph->stroke(_IMG_HANDLER));
              $img base64_encode(ob_get_clean());

              echo 
              '<img src="data:image/png;base64,'.$img.'" />'
              - http://en.wikipedia.org/wiki/Data_URI_scheme
              - [man]ob_start[/man], [man]ob_get_clean[/man], [man]base64_encode[/man]

              Streams sind die brücke die man einschlägt wenn man es nicht vermeiden kann eine Datei anzulegen für etwas das man nach dem script nicht mehr brauch.

              Kommentar


              • #8
                Habe das mal kurz nachgestellt, funktioniert einwandfrei!

                Muss ich den Output-Buffer nach der Verwendung noch schließen?

                EDIT: ... und merci für die Seiten, ist manchmal schwierig etwas zu googlen wenn man nicht genau weiß nach was man genau suchen soll

                Kommentar


                • #9
                  ob_get_clean schließt den automatisch, lies halt mal bitte die manual-seiten die ich verlinkt habe..

                  Kommentar

                  Lädt...
                  X