Image erstellen aus einem Speicherpuffer

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

  • Image erstellen aus einem Speicherpuffer

    Hallo,

    ich habe ein Problem mit dynamisch erstellten Grafiken. (Betriebssystem: Windows; php-Version: 4.3.1)

    Ich möchte eine Grafik von einer com(+)-dll erstellen lassen und mittels gd-Bibliothek versenden.

    Bei der Übertragung als String-Parameter wird beim Lesen in PHP der String nach dem ersten Null-Byte abgebrochen und imagecreatefromstring aus der gd-Biblithek kann keine Grafik erstellen.

    Bei der Übertragung als Olevariant (Variantarray of Bytes) wird in php die Variable als array interpretiert. Ich habe keine Möglichkeit gefunden diese in einen string zu konvertieren, der von imagecreatefromstring verarbeitet weden kann.

    Bei der gd2-Biblithek gibt es zwar die die Funktion gdImageCreateFromPngSource. Diese Funktion hat aber eine Struktur als Parameter, der eine Funktionsrefernz und eine Benutzervariable übergeben wird. Ich habe noch keine Möglichkeit gefunden eine Variable dieser Struktur in Php zu instanzieren.

    Prinzipiell würde es mir auch genügen, wenn ich eine Grafik anlegen kann, und deren Windows-Gerätekontext an meine Zeichen-Dll übergebe.

    Das Zeichnen der Grafik komplett in PHP ist wegen der Komplexität der Daten keine Alternative.

    Hat jemand einen konstruktiven Vorschlag.

  • #2
    PHP-Code:
    $bild=implode('',$OLEvariant); 
    jetzt solltest du nen string haben, den du verarbeiten können solltest

    zur not sollte der umweg über
    - speichern in datei
    - auslesen
    gehen
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      [GD]

      Hatte ich schon probiert

      Die Funktion Implode() hat bei einem Array von 1.200.000 Elementen (Grafik mit 1,2 Mb) nicht reagiert. Die Grafiken können trotz Web durchaus diese Größe haben (Ausdruck von Grafiken auf DinA0- Plottern)

      Kommentar


      • #4
        und speichern in datei geht auch nich?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Speichern ist eine schwierige Sache:

          Die Dateien müssen nach Ablauf der Benutzersitzung wieder gelöscht werden, mit allen Problemen Sessiontimeout, Ausbleiben der Abmeldung...)

          Die Bilder enthalten eventuell Informationen, die nicht für jeden sichtbar sein sollen. Sie können also nicht einfach flach in einen Ordner abgelegt werden.

          Auf diesen Webserver sollen bis zu 200 Zugriffe gleichzeitig möglich sein.

          Und schließlich kostet das Speichern und wieder einlesen Zeit.

          Kommentar


          • #6
            du kannst die bilder außerhalb des webroot speichern.

            es gibt normalerweise einen ordner fpr uploads, phptemp

            wenn du's da reinschreibst sollte es anch beendigung des skripts wieder gelöscht werden.

            wenn nicht kannst du ja ne eigene session-verwaltung basteln und die bilder in nem ordner mit namen der session-id speichern
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Hallo,

              Speichern auf Festplatte sollte der allerallerallerallerletzte Notnagel sein...

              Alternative zu einer Lösung mit PHP dazu versuche ich dann zuerst ein Apache-Shared-Module / ISAP-Dll zu schreiben die das Erstellen der Grafiken übernimmt.

              Das gleiche gilt, wenn ich zwar eine Lösung in PHP finde die aber dann zu langsam ist.

              Kommentar


              • #8
                [GD] vergesst GD

                Hallo,

                mein Problem hat sich auf den ersten Blick eigentlich erledigt.

                Die Grafik liegt in einen webfähigen Grafikformat (gif, jpeg, png) vor und zwar als Variantarray of Bytes.

                Einfache Lösung in den Responsestream einfach die Zeichen schreiben.

                <?php
                $pix = new COM("scoPixmap.Pixmap") or die("<br>peng<br>"); // Com+-Interface instanzieren.
                $arr = $pix->get() ; // varArray of Byte -- php-Array of Bytes
                $len = count($arr);

                for ($j=0; $j<$len; $j++) {
                $c = chr($arr[$j]); // umwandeln in Ascii-Zeichen
                echo ("$c"); // Ausgabe in den Stream.
                }

                $pix->Release () ; // Interface freigeben
                $pix = null ;
                ?>

                Kommentar

                Lädt...
                X