Windows users: If you get the fatal error "Fatal error: Call to undefined function exif_imagetype()", and you have enabled php_exif.dll, make sure you enable php_mbstring.dll. You must put mbstring before exif in the php.ini, i.e.:
extension=php_mbstring.dll
extension=php_exif.dll
You can check whether this has worked by calling phpinfo() and searching for exif.
exif_imagetype
(PHP 4 >= 4.3.0, PHP 5)
exif_imagetype — Determinar el tipo de una imagen
Descripción
$filename
)exif_imagetype() lee los primeros bytes de una imagen y comprueba su firma.
exif_imagetype() se puede usar para evitar llamar a otras funciones exif con tipos de archivos no soportados o junto con $_SERVER['HTTP_ACCEPT'] para verificar si el visionador es capaz o no de ver una imagen específica en el navegador.
Parámetros
-
filename - La imagen que va a ser comprobada.
Valores devueltos
Cuando se encuentra una firma correcta, se devolverá el valor de la constante
apropiada o, de otro modo, el valor devuelto será FALSE. El valor devuelto es el
mismo valor que devuelve getimagesize() en el índice 2, pero
exif_imagetype() es mucho más rápida.
Nota:
exif_imagetype() emitirá un mensaje
E_NOTICEy devolveráFALSEsi no es capaz de leer suficientes bytes del archivo como para determinar el tipo de la imagen.
Historial de cambios
| Versión | Descripción |
|---|---|
| 5.3.0 | Añadido soporte para iconos. |
| 4.3.2 | Soporte para JPC, JP2, JPX, JB2, XBM, y WBMP |
| 4.3.0 | Soporte para SWC |
Constantes predefinidas
Las siguientes constantes están definidas y representan los valores posibles que devuelve exif_imagetype():
| Valor | Constante |
|---|---|
| 1 | IMAGETYPE_GIF |
| 2 | IMAGETYPE_JPEG |
| 3 | IMAGETYPE_PNG |
| 4 | IMAGETYPE_SWF |
| 5 | IMAGETYPE_PSD |
| 6 | IMAGETYPE_BMP |
| 7 | IMAGETYPE_TIFF_II (orden de byte intel) |
| 8 |
IMAGETYPE_TIFF_MM (orden de byte motorola)
|
| 9 | IMAGETYPE_JPC |
| 10 | IMAGETYPE_JP2 |
| 11 | IMAGETYPE_JPX |
| 12 | IMAGETYPE_JB2 |
| 13 | IMAGETYPE_SWC |
| 14 | IMAGETYPE_IFF |
| 15 | IMAGETYPE_WBMP |
| 16 | IMAGETYPE_XBM |
| 17 | IMAGETYPE_ICO |
Ejemplos
Ejemplo #1 Ejemplo de exif_imagetype()
<?php
if (exif_imagetype('imagen.gif') != IMAGETYPE_GIF) {
echo 'La imagen no es gif';
}
?>
Ver también
- image_type_to_mime_type() - Obtiene el tipo Mime de un tipo de imagen devuelto por getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
- getimagesize() - Obtiene el tamaño de una imagen
If the function exif_imagetype() is not available,
you can try the following workaround:
if ( ! function_exists( 'exif_imagetype' ) ) {
function exif_imagetype ( $filename ) {
if ( ( list($width, $height, $type, $attr) = getimagesize( $filename ) ) !== false ) {
return $type;
}
return false;
}
}
By trial and error, it seems that a file has to be 12 bytes or larger in order to avoid a "Read error!". Here's a work-around to avoid an error being thrown:
// exif_imagetype throws "Read error!" if file is too small
if (filesize($uploadfile) > 11)
$mimetype = exif_imagetype($uploadfile);
else
$mimetype = false;
Seems to give a 'Read error' warning if the size of the file is very small (2 bytes). I think this is because it needs a min 3 bytes to determine the file type
libexif can also be used to parse image info out of id3 tags:
exif_read_data("mp3_with_2.4ID3TAGS, '', true, false);
After looking for hours, I found a very good source for exif related programs here: http://drewnoakes.com/code/exif/index.html
It lists exif specifications (pdf), a few good links to exif related stuff. The best source I have found in my quest to understand exif better for use in php based exif tools.
