exif_imagetype

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

exif_imagetypeDeterminar el tipo de una imagen

Descripción

exif_imagetype(string $filename): int

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_NOTICE y devolverá false si 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 Se añadió soporte para iconos.

Constantes predefinidas

Las siguientes constantes están definidas y representan los valores posibles que devuelve exif_imagetype():

Imagetype Constants
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() - Obtener el tamaño de una imagen

add a note add a note

User Contributed Notes 7 notes

up
22
Tim
17 years ago
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;
up
24
christophe dot tournayre at univ*bpclermont dot Fr
11 years ago
Because I only want to check for jpeg or png from a memory string, this is my 2 functions that are quick and don't have any dependencies :

<?php
 
function is_jpeg(&$pict)
  {
    return (
bin2hex($pict[0]) == 'ff' && bin2hex($pict[1]) == 'd8');
  }

  function
is_png(&$pict)
  {
    return (
bin2hex($pict[0]) == '89' && $pict[1] == 'P' && $pict[2] == 'N' && $pict[3] == 'G');
  }
?>
up
15
admin at leonard !spam challis dot com
14 years ago
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.
up
11
tom dot ghyselinck at telenet dot be
16 years ago
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;
    }
}
up
-16
vuatintac at yahoo dot com
9 years ago
to checking file is image, I used this:

function is_image($path)
{
    $a = getimagesize($path);
    $image_type = $a[2];

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP)))
    {
        return true;
    }
    return false;
}
up
-19
Anonymous
18 years ago
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
up
-23
tom at tomvergote dot be
20 years ago
libexif can also be used to parse image info out of id3 tags:

exif_read_data("mp3_with_2.4ID3TAGS, '', true, false);
To Top