[PHP] Odczyt danych EXIF ze zdjęć

PHP posiada wbudowaną funkcję do odczytu metadanych zdjęć – exif_read_data().

Poniższa funkcja zwraca tablicę dwuwymiarową zawierającą nazwę parametru i dane.

Kod:

function pobierz_exif($plik) { $exif = exif_read_data($plik, 'IFD0'); if($exif===false) //Je?li obraz ni zawiera exif zwraca pust? tablic? { return array(); } $exif = exif_read_data($plik, 0, true); foreach ($exif as $key => $section) { foreach ($section as $name => $val) { $dane[] = array("nazwa" => $key.$name, "wartosc" => $val); } $x++; } return $dane; }

Funkcja na początku swojego działania stara się odczytać dane i sprawdza czy zdjęcie je zawiera. Jeśli plik nie zawiera metadanych funkcja zwraca pustą tablicę (o zerowej liczbie elementów).

Wykonajmy dla przykładu taki kod:

var_dump(pobierz_exif('test.jpg'));

Jeśli plik test.jpg istnieje i zawiera dane zobaczymy listing podobny do tego:

Kod:

array(55) { [0]=> array(2) { ["nazwa"]=> string(12) "FILEFileName" – nazwa pliku ["wartosc"]=> string(8) "test.jpg" } [1]=> array(2) { ["nazwa"]=> string(16) "FILEFileDateTime" – data i czas wykonania zdjęcia ["wartosc"]=> int(1244806556) } [2]=> array(2) { ["nazwa"]=> string(12) "FILEFileSize" – rozmiar pliku w bajtach ["wartosc"]=> int(79446) } [3]=> array(2) { ["nazwa"]=> string(12) "FILEFileType" – kod rozszerzenia – w moim przypadku 2 (jpg) ["wartosc"]=> int(2) } [4]=> array(2) { ["nazwa"]=> string(12) "FILEMimeType" – typ mime zdjęcia ["wartosc"]=> string(10) "image/jpeg" } [5]=> array(2) { ["nazwa"]=> string(17) "FILESectionsFound" – znalezione sekcje ["wartosc"]=> string(30) "ANY_TAG, IFD0, THUMBNAIL, EXIF" } [6]=> array(2) { ["nazwa"]=> string(12) "COMPUTEDhtml" – rozmiary zdjęcia gotowe do wstawienia na stronę (html) ["wartosc"]=> string(24) "width="672" height="512"" } [7]=> array(2) { ["nazwa"]=> string(14) "COMPUTEDHeight" – wyliczona wysokość ["wartosc"]=> int(512) } [8]=> array(2) { ["nazwa"]=> string(13) "COMPUTEDWidth" – wyliczona szerokość ["wartosc"]=> int(672) } [9]=> array(2) { ["nazwa"]=> string(15) "COMPUTEDIsColor" – przestrzeń kolorystyczna ["wartosc"]=> int(1) } [10]=> array(2) { ["nazwa"]=> string(25) "COMPUTEDByteOrderMotorola" – organizacja danych wg, standardu motorolli ["wartosc"]=> int(1) } [11]=> array(2) { ["nazwa"]=> string(20) "COMPUTEDExposureTime" – czas ekspozycji ["wartosc"]=> string(14) "0.031 s (1/32)" } [12]=> array(2) { ["nazwa"]=> string(23) "COMPUTEDApertureFNumber" – wartość przysłony ["wartosc"]=> string(5) "f/2.4" } [13]=> array(2) { ["nazwa"]=> string(26) "COMPUTEDThumbnail.FileType" – typ miniatury (kompresja) – tutaj tiff (8) ["wartosc"]=> int(8) } [14]=> array(2) { ["nazwa"]=> string(26) "COMPUTEDThumbnail.MimeType" – typ mime miniatury ["wartosc"]=> string(10) "image/tiff" } [15]=> array(2) { ["nazwa"]=> string(24) "COMPUTEDThumbnail.Height" – wyliczona wysokość miniatury ["wartosc"]=> int(60) } [16]=> array(2) { ["nazwa"]=> string(23) "COMPUTEDThumbnail.Width" – wyliczona szerokość miniatury ["wartosc"]=> int(80) } [17]=> array(2) { ["nazwa"]=> string(20) "IFD0ImageDescription" – opis zdjęcia (czasami dodawany przez aparaty) ["wartosc"]=> NULL } [18]=> array(2) { ["nazwa"]=> string(8) "IFD0Make" – producent aparatu ["wartosc"]=> string(4) "SONY" } [19]=> array(2) { ["nazwa"]=> string(9) "IFD0Model" – model aparatu ["wartosc"]=> string(8) "DSC-D700" } [20]=> array(2) { ["nazwa"]=> string(15) "IFD0Orientation" – orientacja aparatu w osi pion/poziom (1 – poziomo) ["wartosc"]=> int(1) } [21]=> array(2) { ["nazwa"]=> string(15) "IFD0XResolution" - DPIx ["wartosc"]=> string(4) "72/1" } [22]=> array(2) { ["nazwa"]=> string(15) "IFD0YResolution" - DPIy ["wartosc"]=> string(4) "72/1" } [23]=> array(2) { ["nazwa"]=> string(18) "IFD0ResolutionUnit" – jednostki rozdzielczości ["wartosc"]=> int(2) } [24]=> array(2) { ["nazwa"]=> string(12) "IFD0DateTime" – data i godzina wykonania zdjęcia w czytelnym dla człowieka formacie ["wartosc"]=> string(19) "1998:12:01 14:22:36" } [25]=> array(2) { ["nazwa"]=> string(20) "IFD0YCbCrPositioning" – pozycja palety kolorów YCbCr ["wartosc"]=> int(1) } [26]=> array(2) { ["nazwa"]=> string(20) "IFD0Exif_IFD_Pointer" – wersja IFD/EXIF ["wartosc"]=> int(206) } [27]=> array(2) { ["nazwa"]=> string(19) "THUMBNAILImageWidth" – szerokość miniatury ["wartosc"]=> int(80) } [28]=> array(2) { ["nazwa"]=> string(20) "THUMBNAILImageLength" – wysokość miniatury ["wartosc"]=> int(60) } [29]=> array(2) { ["nazwa"]=> string(22) "THUMBNAILBitsPerSample" – Bit/próbkę ["wartosc"]=> array(3) { [0]=> int(8) [1]=> int(8) [2]=> int(8) } } [30]=> array(2) { ["nazwa"]=> string(20) "THUMBNAILCompression" – kompresja miniatury ["wartosc"]=> int(1) } [31]=> array(2) { ["nazwa"]=> string(34) "THUMBNAILPhotometricInterpretation" – numeryczna interpretacja miniatury ["wartosc"]=> int(2) } [32]=> array(2) { ["nazwa"]=> string(21) "THUMBNAILStripOffsets" – ilość offsetów ["wartosc"]=> int(648) } [33]=> array(2) { ["nazwa"]=> string(24) "THUMBNAILSamplesPerPixel" – ilość próbek/pixel w miniaturze ["wartosc"]=> int(3) } [34]=> array(2) { ["nazwa"]=> string(21) "THUMBNAILRowsPerStrip" – liczba kolumn w miniaturze ["wartosc"]=> int(60) } [35]=> array(2) { ["nazwa"]=> string(24) "THUMBNAILStripByteCounts" – waga miniatury ["wartosc"]=> int(14400) } [36]=> array(2) { ["nazwa"]=> string(20) "THUMBNAILXResolution" – DPIx miniatury ["wartosc"]=> string(4) "72/1" } [37]=> array(2) { ["nazwa"]=> string(20) "THUMBNAILYResolution" – DPIy miniatury ["wartosc"]=> string(4) "72/1" } [38]=> array(2) { ["nazwa"]=> string(23) "THUMBNAILResolutionUnit" – jednostki rozdzielczości miniatury ["wartosc"]=> int(2) } [39]=> array(2) { ["nazwa"]=> string(19) "EXIFExposureProgram" – program tematyczny na podczas którego wykonano zdjęcie ["wartosc"]=> int(3) } [40]=> array(2) { ["nazwa"]=> string(19) "EXIFISOSpeedRatings" - migawka ["wartosc"]=> int(200) } [41]=> array(2) { ["nazwa"]=> string(15) "EXIFExifVersion" – wersja Exif ["wartosc"]=> string(4) "0200" } [42]=> array(2) { ["nazwa"]=> string(20) "EXIFDateTimeOriginal" – oryginalny czas i data zrobienia zdjęcia ["wartosc"]=> string(19) "1998:12:01 14:22:36" } [43]=> array(2) { ["nazwa"]=> string(21) "EXIFDateTimeDigitized" – data i godzina zapisu zdjęcia do jpg ["wartosc"]=> string(19) "1998:12:01 14:22:37" }

Zalecam przed kopiowaniem gotowego kodu przeanalizowanie zasady jego działania a w szczególności zwracanej tablicy.