Filetype aus Binärcode auslesen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Filetype aus Binärcode auslesen

    Hi,

    gibt es eine Mögligkeit aus einem Binärcode den Filetype eines Bildes auszulesen?

    Die Bilder stehn in der DB in einem longblob Feld. Ich weiß ich weiß is blöd. Ist nicht von mir und ist zu viel aufwand das abzuändern.


    jemand ne Idee?
    Lurchi ! Lurchi ! Lurchi !

  • #2
    Du kannst zum Beispiel einen StreamWrapper verwenden und die Binärdaten damit an getimagesize weitergeben. Das wäre die saubere aber recht aufwändige Methode.
    Alternativ kannst du die Funktionalität von getimagesize nachbauen und selbst in die Binärdaten schauen, halte ich aber eher für den unglücklichen Weg.
    Ganz Quick und Dirty könntest du das Bild auch aus der Datenbank in eine temporäre Datei schreiben und anschließend getimagesize drauflos lassen. Könnte mir vorstellen, dass das sogar schneller wie der StreamWrapper ist, bringt aber die ganzen Nachteile des Dateisystems mit, d.h. Berechtigungen, ...

    Btw: "Ich weiß ich weiß is blöd." kann man so pauschal nicht sagen.

    Comment


    • #3
      Original geschrieben von PHP-Desaster

      Btw: "Ich weiß ich weiß is blöd." kann man so pauschal nicht sagen.
      Doch, denn der jenige, der die Datei in die DB rein gehauen hat, hätte eigentlich auch den Typ in der DB in einer Spalte schreiben sollen.

      Comment


      • #4
        Original geschrieben von asp2php
        Doch, denn der jenige, der die Datei in die DB rein gehauen hat, hätte eigentlich auch den Typ in der DB in einer Spalte schreiben sollen.
        jipp. naja ich versuchs mal mit dem streamwrapper dank schonmal
        Lurchi ! Lurchi ! Lurchi !

        Comment


        • #5
          Re: Filetype aus Binärcode auslesen

          Original geschrieben von Anbu
          gibt es eine Mögligkeit aus einem Binärcode den Filetype eines Bildes auszulesen?
          Klar. Es soll Betriebssysteme geben, die machen das nur so.

          Für die drei gängigsten Grafikdateitypen, die im WWW so rumschwirren geht das eins-fix-drei:
          PHP Code:
          /// detect image file type
          /// return STR filetype | FALSE for unknown filetype
          function get_image_type(
            
          $binary /// binary string (at least the first 6 bytes)
          ) {
            static 
          $types = array (
              
          => 'jpeg',
              
          => 'gif',
              
          => 'png',
            );

            if (!
          preg_match('/\A(\xff\xd8\xff|GIF8|\x89PNG\x0d\x0a)/ms'$binary$hits)) {
              return 
          FALSE;
            }
            return isset(
          $types[strlen($hits[0])]) ? $types[strlen($hits[0])]: FALSE;

          Viel mehr Mühe gibt sich getimagesize() auch nicht[1].

          Ist ungetestet, sollte aber funktionieren, wenn du den Quellcode aus der Zitatansicht kopierst (wegen der sonst fehlenden Backslashes).

          Aus der Datenbank rausholen musst du sie aber selbst.

          P.S.: Ja, mir war gerade langweilig ...

          --
          [1] Um den Dateityp zu rauszubekommen. Für die Ermittlung der Abmessungen tut es sicher noch etwas mehr.
          Last edited by fireweasel; 02-04-2009, 12:04.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Comment


          • #6
            Doch, denn der jenige, der die Datei in die DB rein gehauen hat, hätte eigentlich auch den Typ in der DB in einer Spalte schreiben sollen.
            Klar, das steht außer Frage. Ich meine das Vorgehen, Dateien in die Datenbank zu legen.

            Comment


            • #7
              Wenn dir im Endeffekt egal ist was für ein MIME-Type das Bild hatte, kannst du sowas machen:

              PHP Code:
              $im imagecreatefromstring($binaryData);
              imagejpeg($im); 
              Mein PHP Blog

              Comment


              • #8
                Re: Re: Filetype aus Binärcode auslesen

                Original geschrieben von fireweasel
                [B]Klar. Es soll Betriebssysteme geben, die machen das nur so.

                Für die drei gängigsten Grafikdateitypen, die im WWW so..........
                Cool danke probier ich gleich mal aus....
                Lurchi ! Lurchi ! Lurchi !

                Comment


                • #9
                  Original geschrieben von ModestLife
                  Wenn dir im Endeffekt egal ist was für ein MIME-Type das Bild hatte, kannst du sowas machen:

                  PHP Code:
                  $im imagecreatefromstring($binaryData);
                  imagejpeg($im); 
                  der type ist mir eigentlich schon wichtig
                  Lurchi ! Lurchi ! Lurchi !

                  Comment

                  Working...
                  X