(PHP 4 >= 4.2.0, PHP 5, PHP 7)
exif_read_data — Lee las cabeceras EXIF desde un JPEG o un TIFF
$filename
[, string $sections
= NULL
[, bool $arrays
= false
[, bool $thumbnail
= false
]]] ) : arrayexif_read_data() lee las cabeceras EXIF desde un archivo de imagen JPEG o TIFF. De esta forma se puede leer los meta-datos generados por cámaras digitales.
Las cabeceras EXIF tienden a estar presentes en imágenes JPEG/TIFF generadas por cámaras digitales, pero desafortunadamente cada fabricante de cámaras digitales tiene una idea diferente de cómo etiquetar sus imágenes, por lo que no siempre se puede contar con que una cabecera Exif específica esté presente.
Height y Width son computados de la misma forma que lo hace getimagesize() por lo que sus valores no deben ser parte de ninguna cabecera devuelta. También, html es una cadena de texto de alto/ancho para usar dentro de un HTML normal.
Cuando una cabecera Exif contiene una nota de Copyright, puede contener ella misma dos valores. Como la solución es inconsistente en el estándar Exif 2.10, la sección COMPUTED devolverá las dos entradas Copyright.Photographer y Copyright.Editor mientras que las secciones IFD0 contienen la matriz de bytes con el carácter NULL que divide ambas entradas. O sólo la primera entrada si el tipo de información era erróneo (el comportamiento normal de Exif). COMPUTED también contendrá la entrada Copyright que es la cadena del copyright original, o una lista separada por comas del copyright de la fotografía y del editor.
La etiqueta UserComment tiene el mismo problema que la etiqueta Copyright. Puede almacenar dos valores. El primero es el que usa la codificación, y el segundo es el valor mismo. Por lo que si la sección IFD sólo contiene la codificación o una matriz de bytes, la sección COMPUTED almacenará la dos entradas UserCommentEncoding y UserComment. La entrada UserComment está disponible en ambos casos por lo que se debería usar con preferencia al valor de la sección IFD0.
exif_read_data() también valida las etiquetas de información EXIF según la especifiación EXIF (» http://exif.org/Exif2-2.PDF, página 20).
Nota:
Windows Me/XP pueden borrar las cabeceras Exif cuando se conecta una cámara.
filename
El nombre de la imagen que se va a leer. No puede ser una URL.
sections
Es una lista separada por comas de las secciones que necesitan estar presentes en el archivo
para producir un array resultante. Si no se puede encontrar ninguna
sección el valor devuelto es FALSE
.
FILE | FileName, FileSize, FileDateTime, SectionsFound |
COMPUTED | html, Width, Height, IsColor, y más si están disponibles. Height y Width son computados de la misma forma que lo hace getimagesize() por lo que sus valores no deben ser parte de ninguna cabecera devuelta. También, html es una cadena de texto de alto/ancho para usar dentro de un HTML normal. |
ANY_TAG | Cualquier información que tenga una Etiqueta, p.ej., IFD0, EXIF, ... |
IFD0 | Toda la información etiquetada de IFD0. En archivos de imagen normales, ésto contiene el tamaño de la imagen y así sucesivamente. |
THUMBNAIL | Se supone que un archivo contiene una miniatura si tiene un segundo IFD. Toda la información etiquetada acerca de la miniatura embebida es almacenada en esta sección. |
COMMENT | Cabeceras de comentarios de imágenes JPEG. |
EXIF | La sección EXIF es una subsección de IFD0. Contiene información más detallada sobre la imagen. La mayoría de estas entradas están relacionadas con la cámara digital. |
arrays
Especifica si cada sección se convierte o no en una matriz.
sections
COMPUTED,
THUMBNAIL, y COMMENT
siempre se convierten en matrices ya que pueden contener valores cuyos nombres
entran en conflicto con otras secciones.
thumbnail
Cuando se establece a TRUE
se lee la miniatura misma. Si no, sólo se lee
la información etiquetada.
Devuelve un array asociativo donde los índices de la matriz son
los nombres de las cabeceras y los valores de la matriz son los valores asociados con
esas cabeceras. Si no se puede devolver información,
exif_read_data() devolverá FALSE
.
Versión | Descripción |
---|---|
4.3.0 | Se puede leer toda la información IFD embebida incluidas matrices (devueltas como tales). También, el tamaño de una miniatura embebida es devuelto en una submatriz THUMBNAIL, y puede devolver miniaturas en formato TIFF. Además, ya no hay una longitud máxima para los valores devueltos (no mientras el límite de memoria haya sido alcanzado) |
4.3.0 | Si PHP tiene soporte para mbstring, el comentario de usuario puede cambiar automáticamente de codificación. También, si el comentario de usuario utiliza la codificación Unicode o JIS, esta codificación será cambiada automáticamente según la configuración inicial de exif en php.ini |
4.3.0 | Si la imagen contiene cualquier información IFD0, entonces COMPUTED contiene la entrada ByteOrderMotorola la cuál es 0 para el orden de byte little-endian (intel) y 1 para el orden de byte big-endian (motorola). También, COMPUTED y UserComment ya no contienen la primera entrada de copyright si el tipo de información era erróneo. |
Ejemplo #1 Ejemplo de exif_read_data()
<?php
echo "prueba1.jpg:<br />\n";
$exif = exif_read_data('pruebas/prueba1.jpg', 'IFD0');
echo $exif===false ? "No se encontró información de cabecera.<br />\n" : "La imagen contiene cabeceras<br />\n";
$exif = exif_read_data('pruebas/prueba2.jpg', 0, true);
echo "prueba2.jpg:<br />\n";
foreach ($exif as $clave => $sección) {
foreach ($sección as $nombre => $valor) {
echo "$clave.$nombre: $valor<br />\n";
}
}
?>
La primera llamada falla ya que la imagen no tiene información de cabecera.
El resultado del ejemplo sería algo similar a:
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