array ( 0 => 'index.php', 1 => 'PHP Manual', ), 'head' => array ( 0 => 'UTF-8', 1 => 'es', ), 'this' => array ( 0 => 'function.exif-read-data.php', 1 => 'exif_read_data', ), 'up' => array ( 0 => 'ref.exif.php', 1 => 'Funciones de Exif', ), 'prev' => array ( 0 => 'function.exif-imagetype.php', 1 => 'exif_imagetype', ), 'next' => array ( 0 => 'function.exif-tagname.php', 1 => 'exif_tagname', ), 'alternatives' => array ( ), 'source' => array ( 'lang' => 'es', 'path' => 'reference/exif/functions/exif-read-data.xml', ), ); $setup["toc"] = $TOC; $setup["toc_deprecated"] = $TOC_DEPRECATED; $setup["parents"] = $PARENTS; manual_setup($setup); ?>
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
exif_read_data — Lee las cabeceras EXIF desde un JPEG o un TIFF
$filename
,$sections
= null
,$arrays
= false,$thumbnail
= falseexif_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