exif_read_data

(PHP 4 >= 4.2.0, PHP 5)

exif_read_data -- Διαβάστε τα EXIF headers από JPEG ή TIFF τύπους εικόνων. Με αυτόν τον τρόπο μπορείτε να διαβάσετε τα meta data που παράγονται από ψηφιακές κάμερες.

Περιγραφή

array exif_read_data ( string filename [, string sections [, bool arrays [, bool thumbnail]]])

Η συνάρτηση exif_read_data() διαβάζει τα EXIF headers από JPEG ή TIFF αρχεία εικόνων. Επιστρέφει ένα array όπου οι δείκτες είναι τα ονόματα των headers και οι τιμές είναι σχετικές με αυτά τα headers. Εάν δεν μπορούν να επιστραφούν δεδομένα το αποτέλεσμα είναι FALSE.

Η παράμετρος filename αντιπροσωπεύει το όνομα του προς ανάγνωση αρχείου και δεν μπορεί να είναι ένα url.

Η παράμετρος sections είναι μία λίστα sections, οι οποίοι χωρίζονται με κόμμα και πρέπει να υπάρχει σε ένα αρχείο για να παράξει αποτέλεσμα array.

FILEFileName, FileSize, FileDateTime, SectionsFound
COMPUTEDhtml, Width, Height, IsColor και άλλα αν είναι διαθέσιμα.
ANY_TAGΟποιαδήποτε πληροφορία έχει ένα Tag π.χ. IFD0, EXIF, ...
IFD0Όλα τα προσαρτημένα δεδομένα του IFD0. Στα συνηθισμένα αρχεία εικόνων αυτό περιλαμβάνει το μέγεθος της εικόνας και άλλα σχετικά.
THUMBNAILΈνα αρχείο πρέπει να περιέχει ένα thumbnail εάν έχει ένα δεύτερο IFD. Όλες οι προσαρτημένες πληροφορίες, σχετικά με το thumbnail, φυλάσσονται σε αυτό το section.
COMMENTHeaders με σχόλια των εικόνων JPEG.
EXIFΤο EXIF section είναι ένα υπό-section του IFD0. Περιέχει περισσότερο λεπτομερείς πληροφορίες σχετικά με μία εικόνα. Τα περισσότερα από αυτά τα στοιχεία σχετίζονται με ψηφιακές κάμερες.

Η παράμετρος arrays καθορίζει το αν κάθε section γίνεται ένα array. Τα sections FILE, COMPUTED και THUMBNAIL γίνονται πάντα arrays καθώς μπορεί να περιέχουν τιμές, τα ονόματα των οποίων προκαλούν conflicts με άλλα sections.

Η παράμετρος thumbnail καθορίζει το αν θα διαβαστεί μόνο το thumbnail, χωρίς την ανάγνωση των προσαρτημένων δεδομένων του.

Σημείωση: Τα exif headers βρίσκονται, συνήθως, σε εικόνες JPEG/TIFF, που παράγονται από ψηφιακές κάμερες. Δυστυχώς, όμως, κάθε κατασκευαστής έχει μία διαφορετική ιδέα για το πώς να κάνει tag τις εικόνες του με αποτέλεσμα να μην μπορείτε να βασίζεστε πάντα στο παρόν Exif header.

Παράδειγμα 1. Παραδείγματα της exif_read_data()

<?php
echo "test1.jpg:<br />\n";
$exif = exif_read_data ('tests/test1.jpg','IFD0');
echo
$exif===false ? "No header data found.<br />\n" : "Image contains headers<br />";
$exif = exif_read_data ('tests/test2.jpg',0,true);
echo
"test2.jpg:<br />\n";
foreach(
$exif as $key=>$section) {
    foreach(
$section as $name=>$val) {
        echo
"$key.$name: $val<br />\n";
    }
}
?>

Η πρώτη κλήση αποτυγχάνει γιατί η εικόνα δεν έχει πληροφορίες header.
test1.jpg:
No header data found.
test2.jpg:
FILE.FileName: test2.jpg
FILE.FileDateTime: 1017666176
FILE.FileSize: 1240
FILE.FileType: 2
FILE.SectionsFound: ANY_TAG, IFD0, THUMBNAIL, COMMENT
COMPUTED.html: width="1" height="1"
COMPUTED.Height: 1
COMPUTED.Width: 1
COMPUTED.IsColor: 1
COMPUTED.ByteOrderMotorola: 1
COMPUTED.UserComment: Exif test image.
COMPUTED.UserCommentEncoding: ASCII
COMPUTED.Copyright: Photo (c) M.Boerger, Edited by M.Boerger.
COMPUTED.Copyright.Photographer: Photo (c) M.Boerger
COMPUTED.Copyright.Editor: Edited by M.Boerger.
IFD0.Copyright: Photo (c) M.Boerger
IFD0.UserComment: ASCII
THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.JPEGInterchangeFormatLength: 523
COMMENT.0: Comment #1.
COMMENT.1: Comment #2.
COMMENT.2: Comment #3end

THUMBNAIL.JPEGInterchangeFormat: 134
THUMBNAIL.Thumbnail.Height: 1
THUMBNAIL.Thumbnail.Height: 1

Σημείωση: Εάν η εικόνα περιέχει δεδομένα IFD0 τότε το COMPUTED περιέχει το ByteOrderMotorola, που είναι 0 για little-endian (intel) και 1 για big-endian (motorola) byte order. Αυτό προστέθηκε στην έκδοση 4.3 της PHP.

Όταν ένα exif header περιέχει μία σημείωση Copyright τότε μπορεί να περιέχει δύο τιμές. Εάν η λύση είναι ακατάλληλη, το COMPUTED section του Exif 2.10 standard θα επίστρέψει και τις δύο καταχωρήσεις, Copyright.Photographer και Copyright.Editor, ενώ τα IFD0 sections θα περιέχουν το byte array με το NULL χαρακτήρα, που ξεχωρίζει τις δύο καταχωρήσεις. Αλλιώς την πρώτη καταχώρηση, εάν ο τύπος δεδομένων ήταν λάθος (συνήθης συμπεριφορά του Exif). Το COMPUTED θα περιέχει επίσης την καταχώρηση Copyright, που είναι είτε το αυθεντικό copyright string είτε μία λίστα, από χωριζόμενα με κόμμα, photo και editor copyright.

Σημείωση: Το tag UserComment έχει το ίδιο πρόβλημα με το Copyright. Μπορεί να αποθηκεύει δύο τιμές: πρώτη τη χρησιμοποιηθείσα κωδικοποίηση και δεύτερη την ίδια την τιμή. Εάν είναι έτσι το IFD section περιέχει μόνο την κωδικοποίηση ή ένα byte array. Το COMPUTED section θα αποθηκεύσει τις καταχωρήσεις UserCommentEncoding και UserComment. Η UserComment είναι διαθέσιμη και στις δύο περιπτώσεις κι έτσι θα έπρεπε να προτιμάται από την τιμή του IFD0 section.

Εάν το σχόλιο του χρήστη χρησιμοποιεί κωδικοποίηση Unicode ή JIS και το module mbstring είναι διαθέσιμο τότε η κωδικοποίηση θα αλλαχθεί αυτόματα, σύμφωνα με τις ρυθμίσεις του exif ini. Αυτό προστέθηκε στην έκδοση 4.3 της PHP.

Σημείωση: Οι Height και Width υπολογίζονται όπως θα το έκανε και η συνάρτηση getimagesize() κι έτσι η τιμές τους δεν πρέπει να συμπεριλαμβάνονται σε κάποιο επιστρεφόμενο header. Επίσης το html είναι height/width text string που πρόκειται να χρησιμοποιηθεί σε συνηθισμένο HTML κώδικα.

Σημείωση: Ξεκινώντας από την έκδοση 4.3 της PHP, η συνάρτηση μπορεί να "διαβάσει" όλα τα συνημμένα IFD δεδομένα που περιέχουν arrays. Επίσης το μέγεθος ενός συνημμένου thumbnail επιστρέφεται στο subarray THUMBNAIL και η συνάρτηση exif_read_data() μπορεί να επιστρέφει thumbnails σε μορφήTIFF. Τελευταία και σημαντική παρατήρηση, δεν υπάρχει πλέον ένα μέγιστο μήκος για επιστρεφόμενες τιμές (όχι μέχρι φταστεί το όριο της μνήμης).

Σημείωση: Η συνάρτηση αυτή υπάρχει μόνο στην PHP 4, και όταν αυτή έγινε compiled χρησιμοποιώντας την --enable-exif. Η λειτουργικότητα και η συμποριφόρα της έχουν αλλάξει στην PHP 4.2. Η παλαιότερες εκδόσεις είναι αρκετά ασταθείς.

Από την έκδοση 4.3 της PHP το σχόλιο χρήστη μπορεί να αλλάξει αυτόματα κωδικοποίηση εάν η PHP 4 έχει γίνει compiled χρησιμοποιώντας την --enable-mbstring.

Η συνάρτηση αυτή δε χρειάζεται την GD image library.

Ανατρέξτε επίσης στις: exif_thumbnail() και getimagesize().