JPG erzeugen aus MS Access

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

  • JPG erzeugen aus MS Access

    Hallo Leute!

    Ich möchte aus einer Access Datenbank Bilder auslesen. Diese Bilder sind in der Datenbank als OLE-Objekt gespeichert. Ich habe mittels ODBC eine Verbindung zur Access-Datenbank aufgebaut. Das funzt auch sehr gut. Ich kann auch alle Werte auslesen.

    Die Werte für das JPGE sind z.b. folgende:

    ÿØÿàJFIF,,ÿíPhotoshop 3.08BIMÿÛC    #%$""!&+7/&)4)!"0A149;>>>%.DIC;ÿÛC  ;("(;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ÿÀôw"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖ× ØÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡

    Wie kann ich nun aus diesen Werten ein JPG Bild erzeugen???
    Kann mir irgendjemand ein Tipp geben?

    Bedanke mich schonmal für eure Bemühungen

    Gruss

    Christian

  • #2
    Du musst einen entsprechenden header senden. Aus diesem und tausend anderen Gründen sollte man immer nur den Pfad zu den Bildern inder DB speichern
    h.a.n.d.
    Schmalle

    http://impressed.by
    http://blog.schmalenberger.it



    Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
    ... nur ohne :-)

    Kommentar


    • #3
      Hallo!

      Es liegt nicht am Header!

      zur Zeit habe ich folgendes Script
      $pname = Name der JPG Datei z.b. 10.jpg
      $blob = ist das OLE-Object

      while(odbc_fetch_row($queryexe))
      {
      $pname = odbc_result($queryexe, 22);
      $blob = odbc_result($queryexe,29);
      $myFile= fopen($pname,'w+'); // Open the file for writing
      fwrite($myFile,$blob);
      fclose($myFile);
      // $altesBild=ImageCreateFromJPEG("$PicPathIn"."$pname");

      echo ($pname."<br>---- blob --<br><br>");
      echo ($blob."<br>---- ende blob --- <br><br><br>");
      }

      Die gesamte JPG werden auch im Verzeichnis erstellt. Allerdings, wenn ich die JPGs öffne, dann bekomme ich entweder nur ein weisses Bild oder ein nicht ganz vollständiges Bild. Wie dieses

      http://www.udo-baldewein.de/test.jpg

      Woran kann das liegen? Muss man irgendwas besonderes beachten, wenn man mit dem Befehl fwrite arbeitet?

      Gruss
      Christian
      EDIT:
      img-Tag deleted by asp2php.
      Zuletzt geändert von asp2php; 06.09.2004, 15:48.

      Kommentar


      • #4
        Original geschrieben von schmalle
        Du musst einen entsprechenden header senden. Aus diesem und tausend anderen Gründen sollte man immer nur den Pfad zu den Bildern inder DB speichern
        ne, das reicht leider nicht. du musst normalerweise ein paar bytes vom anfang der daten auslassen. das liegt an der bescheurten ole verpackung. soweit ich mich erinnern kann muss mann die ersten 78 byte weglassen.

        gruss
        Sike

        Kommentar


        • #5
          Hi Silke!

          Vielen Dank für diese wertvolle Information. Und wie bekomme ich jetzt raus, wieviel byte ich abschneiden muss.

          Und die zweite blöde frage. Wie kann ich z.b. 78 byte von dem Stream abschneiden???

          Gruss

          Christian

          Kommentar


          • #6
            http://www.php.net/manual/en/function.substr.php

            Kommentar


            • #7
              Vielen Dank

              Kommentar


              • #8
                soweit ich mich erinnern kann muss mann die ersten 78 byte weglassen.
                Ich habe jetzt folgende Zeile in die while schleife eingebaut.

                $b = substr($blob, 79, -1);
                fputs($myFile,$b);

                Leider funzt das gar nicht.
                Jetzt bekomme ich keine Bilder mehr angezeigt.

                Bin für weitere Hinweise sehr, sehr dankbar.
                Würde mich echt freuen, wenn ich es mit eurer Hilfe schaffen würde.

                Gruss

                Christian

                Kommentar


                • #9
                  was willst du mit -1 in 3. Parameter
                  außerdem wird's von 0 gezählt, also:
                  $blob = substr($blob,78); -> byte 0 bis 77 weggeschnitten

                  Kommentar


                  • #10
                    Original geschrieben von the_duke
                    Hi Silke!
                    hrhr, silke.... rofl (=

                    SIKE plz - danke

                    Kommentar


                    • #11
                      also das mit den byte abschneiden stammt noch aus meine
                      delphi tagen... ich kann dir leider nicht mit sicherheit sagen ob
                      das auch bei php zutrifft. soweit ich aber den anfang von dem output
                      den du ganz oben gepostet hast beurteilen kann stimmt der jpg header. sieht also so aus das du das weglassen weg lassen kannst ^^

                      ein paar tips:

                      - hast du mal die dateigrössen verglichen?
                      - mal nen sehr kleines jpg benutz?
                      - vergleiche das per php erzeugte und das original mit einem hexeditor


                      Sike

                      Kommentar


                      • #12
                        Hi Sike!

                        Sorry, dass ich deinen Namen falsch geschreiben haben.

                        Ich werde eure Tipps morgen früh mal ausprobieren.

                        Bis dahin. Erstmal vielen Dank


                        Hi asp2php

                        Du hast natürlich recht. Ich werde den Substr. mal umbauen. Aber das werde ich erst morgen machen

                        Gruss

                        Christian

                        Kommentar


                        • #13
                          Hallo Leute!

                          - hast du mal die dateigrössen verglichen?
                          ja das habe ich gemacht. Und das ist wirklich sehr merkwürdig.
                          Das original JPG hat eine Grösse von 40.563 Bytes 375 x 500.

                          Das JPG aus der Access-Datenbank hat nur eine Grösse von 4.096 Bytes.

                          Woran kann das liegen.
                          Die HexWerte kommen zur Zeit so aus der DB. Ist dort vielleicht ein Fehler im Script. Warum werden nur 4.096 Bytes geschrieben?

                          while(odbc_fetch_row($queryexe))
                          {
                          $pname = odbc_result($queryexe, 22);
                          $blob = odbc_result($queryexe,29);
                          $myFile= fopen($pname,'w+'); // Open the file for writing
                          stream_set_write_buffer($myFile, 0);
                          fputs($myFile,$blob);
                          fflush ($myFile);
                          fclose($myFile);
                          }


                          Gruss
                          Christian

                          Kommentar


                          • #14
                            Code:
                            ÿØÿàJFIF ...
                            Diese JPG-Signatur ist nicht ganz korrekt, die Längenangaben nach dem Start of Scan sind verschoben (vermutlich liegt das aber nur an verschluckten 0x00 im Forum)

                            4096 scheint ein Defaultwert von odbc_result() zu sein;
                            ändert sich etwas, wenn du folgende Zeilen _vor_ das erste odbc_result() einfügst ?
                            PHP-Code:
                            odbc_binmode($queryexeODBC_BINMODE_RETURN); // daten voll binaer holen
                            odbc_longreadlen($queryexe0); // alle binaerdaten zurueckgeben 

                            nice day
                            Quickborner

                            Kommentar


                            • #15
                              odbc_binmode($queryexe, ODBC_BINMODE_RETURN); // daten voll binaer holen
                              Hi Quickborner!

                              du hast sicherlich recht, das es sich bei den 4096 um ein Defaultwert bei dem SQL-Result handelt.

                              Ich habe jetzt mal deine beiden Zeilen in mein codeblock eingebaut. Leider funzt es nicht richtig.

                              Die Bilder haben jetzt nur noch eine grösse von 1 Byte!

                              mmh... Ich glaube ich bin kurz davor es mit eurer Hilfe zu schaffen. Vielleicht habt ihr ja noch andere gute Tipps.

                              Schönen Tag noch

                              Christian

                              Kommentar

                              Lädt...
                              X