PHP: Metadaten einer JPG Datei auslesen

JPG Bilder von Digitalkameras oder Smartphones enthalten Metadaten, die man mit PHP auslesen und entsprechend auswerten kann. PHP stellt dafür die Funktion exif_read_data() zur Verfügung.

PHP Code (eingebettet in HTML):
<?php
$datei = "pfad/Bild.jpg";
$meta = exif_read_data($datei, 0, true);
foreach ($meta as $s1 => $s2)
{
  foreach ($s2 as $name => $wert)
  {
    echo $s1 . ":" . $name . ": " . $wert . "<br>";
  }
}
?>

In der Variablen $datei muss der Pfad und der Dateiname entsprechend angepasst werden.

Beispiel




Das Originalbild besitzt eine Auflösung von 4032 x 3024 Pixel. Alle Metadaten dieses Bildes:

FILE:FileName: IMG_7478.jpg
FILE:FileDateTime: 1749210187
FILE:FileSize: 1076645
FILE:FileType: 2
FILE:MimeType: image/jpeg
FILE:SectionsFound: ANY_TAG, IFD0, THUMBNAIL, EXIF, GPS
COMPUTED:html: width="4032" height="3024"
COMPUTED:Height: 3024
COMPUTED:Width: 4032
COMPUTED:IsColor: 1
COMPUTED:ByteOrderMotorola: 1
COMPUTED:ApertureFNumber: f/2.8
COMPUTED:Thumbnail.FileType: 2
COMPUTED:Thumbnail.MimeType: image/jpeg
IFD0:Make: Apple
IFD0:Model: iPhone 13 Pro
IFD0:Orientation: 1
IFD0:XResolution: 72/1
IFD0:YResolution: 72/1
IFD0:ResolutionUnit: 2
IFD0:Software: 18.4.1
IFD0:DateTime: 2025:05:19 21:30:52
IFD0:HostComputer: iPhone 13 Pro
IFD0:YCbCrPositioning: 1
IFD0:Exif_IFD_Pointer: 236
IFD0:GPS_IFD_Pointer: 2594
THUMBNAIL:Compression: 6
THUMBNAIL:XResolution: 72/1
THUMBNAIL:YResolution: 72/1
THUMBNAIL:ResolutionUnit: 2
THUMBNAIL:JPEGInterchangeFormat: 2998
THUMBNAIL:JPEGInterchangeFormatLength: 5221
EXIF:ExposureTime: 1/41
EXIF:FNumber: 14/5
EXIF:ExposureProgram: 2
EXIF:ISOSpeedRatings: 800
EXIF:ExifVersion: 0232
EXIF:DateTimeOriginal: 2025:05:19 21:30:52
EXIF:DateTimeDigitized: 2025:05:19 21:30:52
EXIF:UndefinedTag:0x9010: +02:00
EXIF:UndefinedTag:0x9011: +02:00
EXIF:UndefinedTag:0x9012: +02:00
EXIF:ComponentsConfiguration:
EXIF:ShutterSpeedValue: 76907/14380
EXIF:ApertureValue: 77364/26041
EXIF:BrightnessValue: 31241/99524
EXIF:ExposureBiasValue: 0/1
EXIF:MeteringMode: 5
EXIF:Flash: 16
EXIF:FocalLength: 9/1
EXIF:SubjectLocation: Array
EXIF:MakerNote: Apple iOS
EXIF:SubSecTimeOriginal: 964
EXIF:SubSecTimeDigitized: 964
EXIF:FlashPixVersion: 0100
EXIF:ColorSpace: 65535
EXIF:ExifImageWidth: 4032
EXIF:ExifImageLength: 3024
EXIF:SensingMethod: 2
EXIF:SceneType:
EXIF:ExposureMode: 0
EXIF:WhiteBalance: 0
EXIF:FocalLengthIn35mmFilm: 77
EXIF:SceneCaptureType: 0
EXIF:UndefinedTag:0xA432: Array
EXIF:UndefinedTag:0xA433: Apple
EXIF:UndefinedTag:0xA434: iPhone 13 Pro back triple camera 9mm f/2.8
EXIF:UndefinedTag:0xA460: 2
GPS:GPSLatitudeRef: N
GPS:GPSLatitude: Array
GPS:GPSLongitudeRef: E
GPS:GPSLongitude: Array
GPS:GPSAltitudeRef:
GPS:GPSAltitude: 297614/4583
GPS:GPSTimeStamp: Array
GPS:GPSSpeedRef: K
GPS:GPSSpeed: 0/1
GPS:GPSImgDirectionRef: M
GPS:GPSImgDirection: 6099/1024
GPS:GPSDestBearingRef: M
GPS:GPSDestBearing: 6099/1024
GPS:GPSDateStamp: 2025:05:19
GPS:UndefinedTag:0x001F: 65855/20031


Viele dieser Metadaten sind in der Praxis nicht relevant. Das Beispiel soll nur verdeutlichen, welche Informationen zur Verfügung stehen. Natürlich kann man einzelne Metadaten gezielt aus dem Array auslesen.

Auslesen des Herstellers mit Modell und dem Aufnahmedatum:

echo "Kamera Hersteller: " . $meta["IFD0"]["Make"] . "<br>";
echo "Kamera Model: " . $meta["IFD0"]["Model"] . "<br>";
echo "Aufnahmedatum: " . $meta["EXIF"]["DateTimeOriginal"] . "<br>";

Ergebnis:

Kamera Hersteller: Apple
Kamera Model: iPhone 13 Pro
Aufnahmedatum: 2025:05:19 21:30:52


Hinweis:

Manche Metadaten geben als Wert Array aus, d.h. es gibt in diesem Array eine dritte Dimension. Benötigt man z.B. die GPS Koordinaten (Latitude und Longitude), dann muss man das dazugehörige Array auslesen.

Latitude:
echo "Grad: " . $meta["GPS"]["GPSLatitude"]["0"] . "<br>";
echo "Minuten: " . $meta["GPS"]["GPSLatitude"]["1"] . "<br>";
echo "Sekunden: " . $meta["GPS"]["GPSLatitude"]["2"] . "<br>";
echo "Ref: " . $meta["GPS"]["GPSLatitudeRef"] . "<br>";

Ausgabe:

Grad: 39/1
Minuten: 40/1
Sekunden: 4292/100
Ref: N


Die Werte sind Zeichenketten und enhalten bei Stunden, Minuten und Sekunden einen Divisor. Die Latitude Angabe lautet in diesem Beispiel:

39° 40' 42.92" N
Die Breitenangabe (Latitude) wird jeweils um N (für Nord, entspricht Nordhalbkugel) bzw. S (für Süd, Südhalbkugel) ergänzt. Die Längenangabe (Longitude) entsprechend um E (East=Osten) oder W (Westen)