EXIF Tags auslesen

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

  • #16
    $exif speichert den Inhalt des Exif-Headers einer Bilddatei. Raus kommt dabei, was ich auf meiner zweiten Testseite (hier ) beispielhaft für zwei Bilder ausgeben lasse.
    Da es den Beitrag meiner Meinung nach unübersichtlich macht, habe ich nicht den Inhalt der ganzen Ausgabe gepostet, sondern nur den relevanten Teil [Comments] => W. Das heißt schon im $exif wird nur der erste Buchstabe gespeichert, woraus ich geschlossen habe, dass es an der Zeile
    PHP-Code:
     $exif exif_read_data($img2,IFD0); 
    liegt.

    Kommentar


    • #17
      Aha...

      Jetzt haben wir alle relevanten Informationen zur Verfügung:

      1 Bild,
      1 exif_read_data()-Aufruf und
      1 Testausgabe

      Prima.

      Mehr braucht man gar nicht um zu erkennen, dass da bei dir wirklich etwas fehlerhaft arbeitet.

      Wenn ich folgendes Aufrufe:
      PHP-Code:
      print_r(exif_read_data('01.jpg','IFD0')); 
      erscheint korrekt:
      Array ( [FileName] => 01.jpg [FileDateTime] => 1223648831 [FileSize] => 64984 [FileType] => 2 [MimeType] => image/jpeg [SectionsFound] => ANY_TAG, IFD0, THUMBNAIL, EXIF, WINXP [COMPUTED] => Array ( [html] => width="500" height="375" [Height] => 375 [Width] => 500 [IsColor] => 1 [ByteOrderMotorola] => 0 [ApertureFNumber] => f/6.7 [Thumbnail.FileType] => 2 [Thumbnail.MimeType] => image/jpeg ) [Make] => CAMERA [Model] => 5MP-9A3 [Orientation] => 1 [XResolution] => 72/1 [YResolution] => 72/1 [ResolutionUnit] => 2 [Software] => Ver 1.02 x [DateTime] => 2006:03:28 15:08:47 [YCbCrPositioning] => 2 [Exif_IFD_Pointer] => 426 [Comments] => Wasserfälle im Nationalpark Canaima [CustomRendered] => 0 [ExposureMode] => 0 [WhiteBalance] => 0 [DigitalZoomRatio] => 0/100 [FocalLengthIn35mmFilm] => 58 [SceneCaptureType] => 0 [GainControl] => 0 [Contrast] => 0 [Saturation] => 0 [Sharpness] => 0 [SubjectDistanceRange] => 0 [THUMBNAIL] => Array ( [Compression] => 6 [Orientation] => 1 [XResolution] => 72/1 [YResolution] => 72/1 [ResolutionUnit] => 2 [JPEGInterchangeFormat] => 976 [JPEGInterchangeFormatLength] => 13698 [YCbCrPositioning] => 2 ) [ExposureTime] => 1/200 [FNumber] => 67/10 [ExposureProgram] => 2 [ISOSpeedRatings] => 100 [ExifVersion] => 0220 [DateTimeOriginal] => 2006:03:28 15:08:47 [DateTimeDigitized] => 2006:03:28 15:08:47 [ComponentsConfiguration] => � [ShutterSpeedValue] => 77/10 [ApertureValue] => 55/10 [ExposureBiasValue] => 0/10 [MaxApertureValue] => 31/10 [MeteringMode] => 2 [LightSource] => 0 [Flash] => 0 [MakerNote] => ���������������� �����®-s™Ý¬Ù˜�������ªdKK€ÿÿÿÿÿÿÿÿ¯�¼¼ [FlashPixVersion] => 0100 [ColorSpace] => 1 [ExifImageWidth] => 500 [ExifImageLength] => 375 [RelatedSoundFile] => [FileSource] =>  )
      Mehr kann ich dazu nicht sagen...

      Übrigens:
      sections is a comma separated list of sections that need to be present in file to produce a result array.
      Zuletzt geändert von TobiaZ; 10.10.2008, 15:39.

      Kommentar


      • #18
        Wenn ich es auf meinem Rechner mit Xampp aufrufe erscheint auch alles korekt, nur leider nicht auf dem Server. Wo könnte denn ein Ansatz der Fehlersuche sein? Ich weiß leider nicht mehr weiter.

        Kommentar


        • #19
          Hoster.

          Kommentar


          • #20
            Original geschrieben von asp2php
            Aber doch nicht in Attribut title!
            Gerade dort und auch in allen anderen Attributen. Schließlich kann man mit einem "'>" oder '">' lustige HTML- und mit "javascript: " lustige Code-Injections basteln.

            *einschieb*
            Übrigens, das unsinnige Leerzeichen im "java script" stammt nicht von mir, sondern von der Board-Software hier. Das ist nicht gerade ein Zeichen dafür, dass der Autor des Boards die Problematik wirklich verstanden hat. Sieht stark nach einem schnellen Hotfix aus.

            Zurück zum eigentlichen Problem:

            Beim Durchsuchen meiner PHP.ini nach "exif" bin ich über einige Einträge gestolpert, die mir sagen, dass die Strings, die exif_read_data() zurückgibt, auch Unicode-Strings sein können. Wenn man jetzt noch hinzunimmt, dass es sich bei den EXIF-Kommentar-Daten in deiner Beispiel-Grafik-Datei um Little-Endian-kodiertes UTF-16 (UCS-2LE) handelt, liegt die Vermutung nahe, dass nach dem einzelnen "W", das du siehst, diverse 0-Bytes kommen, die echo() oder print() als "Ende der String-Ausgabe" interpretieren.
            ... und so wie es aussieht, stolpert auch exif_read_data() selbst drüber (strlen($exif['Comments']) === 1) und liefert eben nur bis zum ersten 0-Byte aus. Im Big-Endian-Mode käme hierbei sogar ein Leerstring raus, weil da das erste Byte ein Null-Byte ist (hab ich gerade getestet).

            Lösungsvorschlag:

            Suche in der PHP.ini nach "exif.encode_unicode". Wenn dahinter " = UCS-2LE" steht, hast du den Übeltäter gefunden. Ändere das in " = UTF-8" oder (nur empfehlenswert, wenn du weißt, was du tust) in die 8-Bit-Kodierung deiner Wahl (ISO-8859-15 etc.)

            Zumindest bei meiner PHP-Installation hat das geholfen.

            Ein Blick ins PHP-Handbuch hätte übrigens diesen 4 Jahre alten, aber trotzdem hilfreichen Nutzerkommentar zu Tage gefördert. Noch nicht ganz so alt ist der Eintrag zur Laufzeit-Konfiguration der exif-Extension.
            Zuletzt geändert von fireweasel; 11.10.2008, 09:38.
            Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

            Kommentar

            Lädt...
            X