Introduction
Avec l'extension EXIF, vous pouvez travailler avec
les meta-données des images. Par exemple, vous pouvez utiliser les
fonctions EXIF pour lire les meta-données d'une image prise avec un
appareil photographique numérique, et placées dans les en-têtes des
images JPEG et
TIFF.
Pré-requis
PHP doit être compilé avec l'option
--enable-exif. PHP n'a pas besoin de bibliothèque supplémentaire pour faire
fonctionner cette extension. Les utilisateurs Windows doivent aussi
avoir activé l'extension
.
Installation
Pour activer le support EXIF en PHP, il suffit
d'ajouter l'option de compilation --enable-exif.
Les utilisateurs Windows doivent s'assurer que les
bibliothèques DLL php_mbstring.dll et php_exif.dll
sont spécifiées dans le fichier php.ini. La bibliothèque
php_mbstring.dll doit être chargée
avant la bibliothèque php_exif.dll : pensez
à ajuster votre php.ini.
Configuration à l'exécution
Le comportement de ces fonctions est affecté par la
configuration dans le fichier php.ini.
EXIF supporte automatiquement la conversion depuis
Unicode et JIS, lorsque le module
est compilé avec PHP. Cela se fait en décodant le
commentaire avec le jeu de caractères spécifié. Le résultat est
ensuite codé avec un autre jeu de caractères, compatible avec la
sortie HTTP.
Tableau 85. Options de configuration
| Nom |
Par défaut |
Modifiable |
Historique |
| exif.encode_unicode |
"ISO-8859-15" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
| exif.decode_unicode_motorola |
"UCS-2BE" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
| exif.decode_unicode_intel |
"UCS-2LE" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
| exif.encode_jis |
"" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
| exif.decode_jis_motorola |
"JIS" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
| exif.decode_jis_intel |
"JIS" |
PHP_INI_ALL |
Disponible depuis PHP 4.3.0. |
Pour plus de détails sur les constantes PHP_INI_*, reportez-vous à
.
- exif.encode_unicode
- exif.encode_unicode
définit la méthode de gestion des commentaires écrits en Unicode.
La valeur par défaut est ISO-8859-15, qui devrait
fonctionner dans tous les pays non-asiatiques. Cette directive
peut être laissée vide, ou prendre un des jeux de caractères
supporté par mbstring. Si elle est vide, le jeu de caractères
interne de mbstring sera utilisé.
-
exif.decode_unicode_motorola
- exif.decode_unicode_motorola
définit le jeu de caractères de remplacement pour les commentaires
utilisateurs écrits en Unicode, si l'ordre des bits est celui de
Motorola (big-endian). Cette directive ne peut être laissée vide,
et doit être un des jeux de caractères supportés par l'extension
mbstring. La valeur par défaut est UCS-2BE.
-
exif.decode_unicode_intel
- exif.decode_unicode_intel
définit le jeu de caractères de remplacement pour les commentaires
utilisateurs écrits en Unicode, si l'ordre des bits est celui de
Intel (little-endian). Cette directive ne peut être laissée vide,
et doit être un des jeux de caractères supportés par l'extension
mbstring. La valeur par défaut est UCS-2LE.
- exif.encode_jis
- exif.encode_jis
définit la méthode de gestion des commentaires écrits en
caractères JIS. La valeur par défaut est une chaîne vide, qui fait
que le jeu de caractères interne de mbstring est utilisé.
-
exif.decode_jis_motorola
- exif.decode_jis_motorola
définit le jeu de caractères de remplacement pour les commentaires
utilisateurs écrits en JIS, si l'ordre des bits est celui de
Motorola (big-endian). Cette directive ne peut être laissée vide,
et doit être un des jeux de caractères supportés par l'extension
mbstring. La valeur par défaut est JIS.
- exif.decode_jis_intel
- exif.decode_jis_intel
définit le jeu de caractères de remplacement pour les commentaires
utilisateurs écrits en JIS, si l'ordre des bits est celui de Intel
(little-endian). Cette directive ne peut être laissée vide, et
doit être un des jeux de caractères supportés par l'extension
mbstring. La valeur par défaut est JIS.
Voici un éclaircissement sur l'utilisation des
directives de configuration.
Types de ressources
Cette extension ne définit aucune ressource.
Constantes pré-définies
Ces constantes sont définies par cette extension, et
ne sont disponibles que si cette extension a été compilée avec PHP, ou
bien chargée au moment de l'exécution.
EXIF_USE_MBSTRING
()
La fonction
liste plusieurs constantes connexes.
|
EXIF_READ_DATA
(PHP 4 >= 4.3.0, PHP 5)
exif_read_data — Lit les en-têtes
EXIF dans les images
JPEG ou
TIFF Description
array exif_read_data ( string filename [, string
sections [, bool arrays [, bool thumbnail]]] )
exif_read_data() lit les
en-têtes EXIF des images
JPEG et TIFF.
Avec cette fonction, vous pouvez lire les données méta générées par les
appareils photos numériques.
Les en-têtes EXIF
tendent à être présents dans les images JPEG/TIFF générées par les
appareils photos numériques, mais malheureusement, chaque appareil photo
numérique a une idée différente de la façon dont leurs images doivent être
marquées, donc, vous ne pouvez pas toujours compter sur un en-tête EXIF
spécifique, bien que présent.
Les paramètres Height et Width
sont calculés de la même façon que pour la fonction
, donc leurs valeurs ne feront parties d'aucun en-tête
retourné. De même, l'index html est la représentation textuelle
de la hauteur/largeur utilisée dans une balise image
HTML classique.
Lorsqu'un en-tête EXIF contient une note de Copyright,
cet en-tête peut alors contenir lui-même deux valeurs. Comme cette
solution est incohérente avec les standards EXIF 2.10, la section
COMPUTED retournera les deux en-têtes, Copyright.Photographer
et Copyright.Editor, tandis que les sections IFD0
contiennent le tableau d'octets avec des caractères NULL pour séparer les
deux entrées ; ou bien, juste la première entrée si le type de données
était erroné (comportement par défaut de EXIF). La section COMPUTED
va aussi contenir une entrée Copyright, qui sera soit la chaîne
originale de copyright, soit une liste de valeurs séparées par des
virgules de photos et de copyright de l'auteur.
La balise UserComment présente le même
problème que la balise Copyright. Elle peut stocker deux valeurs : en
premier, le jeu de caractères utilisé, puis la valeur elle-même. Si c'est
le cas, la section IFD contiendra uniquement le jeu de
caractères, ou bien un tableau d'octets. La section COMPUTED va
stocker les deux entrées UserCommentEncoding et
UserComment. L'index UserComment est disponible dans les
deux cas, et il est préférable de l'utiliser, plutôt que la valeur de la
section IFD0.
exif_read_data() valide les
données des balises EXIF en accord avec la spécification EXIF (, page 20).
Note: Windows ME/XP
peuvent endommager les en-têtes EXIF lors de la connexion à la caméra.
Plus d'informations disponibles sur
.
Liste de paramètres
- filename
- Le nom du fichier image à lire. Il ne peut pas être
une URL.
- sections
- Liste de valeur séparées par des virgules des
sections qui devront être présentées dans le tableau de résultat. Si
aucune des sections demandées n'est trouvée, la valeur retournée est
FALSE.
- arrays
- Spécifie si chaque section doit être un tableau ou
non. Les sections FILE, COMPUTED et
THUMBNAIL seront toujours transformées en tableau, car elle
contiennent des noms qui risquent d'être en conflit.
- thumbnail
- Lorsque défini à TRUE, la miniature
elle-même est lue. Sinon, seules les données contenues dans le taf
seront lues.
Valeurs de retour
Retourne un tableau associatif où les indexes sont les
noms des en-têtes et les valeurs sont les valeurs associées à ces
en-têtes. Si aucune donnée ne peut être retournée, exif_read_data()
retournera FALSE.
Historique
Exemple
avec exif_read_data()
<?php
echo
"test1.jpg:<br />\n";
$exif =
exif_read_data('tests/test1.jpg',
'IFD0');
echo $exif===false
? "Aucun
en-tête de donnés n'a été trouvé.<br />\n"
: "L'image contient
des en-têtes<br />\n";
$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";
}
}
?> |
Le premier appel échoue car l'image n'a pas d'en-tête d'information.
L'exemple ci-dessus va afficher quelque chose de
similaire à :
test1.jpg:
Aucun en-tête de donnés n'a été trouvé.
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
|
|