2009-08-15 13 views
10

¿Alguien sabe todos los resultados posibles para el 3er valor devuelto por la función getimagesize() de PHP? Ejemplo Este código de abajo volverá:¿Qué tipo de archivos devuelve PHP getimagesize()?

  • $imageinfo['2'] = 2; para una imagen un jpg,
  • $imageinfo['2'] = 3; para una imagen un png,
  • $imageinfo['2'] = 0; para una imagen un gif.

Es posible que los números no sean correctos, pero ya entiendes.

No encuentro en php.net ni en ninguna otra parte una lista de todos los resultados posibles para el 3er valor.

$imageinfo = getimagesize($imageurl); 
$image_type = $imageinfo['2']; 

Respuesta

28

Ejecutar este:

print_r(get_defined_constants()); 

y luego buscar constantes con el prefijo IMAGETYPE_. En mi instalación de PHP 5.3 Tengo estos valores:

[IMAGETYPE_GIF] => 1 
[IMAGETYPE_JPEG] => 2 
[IMAGETYPE_PNG] => 3 
[IMAGETYPE_SWF] => 4 
[IMAGETYPE_PSD] => 5 
[IMAGETYPE_BMP] => 6 
[IMAGETYPE_TIFF_II] => 7 
[IMAGETYPE_TIFF_MM] => 8 
[IMAGETYPE_JPC] => 9 
[IMAGETYPE_JP2] => 10 
[IMAGETYPE_JPX] => 11 
[IMAGETYPE_JB2] => 12 
[IMAGETYPE_SWC] => 13 
[IMAGETYPE_IFF] => 14 
[IMAGETYPE_WBMP] => 15 
[IMAGETYPE_JPEG2000] => 9 
[IMAGETYPE_XBM] => 16 
[IMAGETYPE_ICO] => 17 
[IMAGETYPE_UNKNOWN] => 0 
[IMAGETYPE_COUNT] => 18 

Como se puede ver Flash SWF son consideradas las imágenes, y de hecho getimagesize() es capaz de leer el ancho y la altura de un objeto SWF. Para mí, me pareció una curiosidad cuando la descubrí por primera vez, por eso lo mencioné aquí.

+0

Buena respuesta, he agregado otra respuesta que incluye un fragmento de código que hará el filtrado de los tipos de archivos de imagen para usted. – mjsa

5

Este índice contiene el valor de una de PHP de IMAGETYPE_XXX constants. Se puede encontrar una lista completa de ellos en esa página, hacia abajo. Esa página no proporciona el valor INT real de cada uno, pero debería poder imprimir algunos para obtener los valores necesarios. También podría hacer una verificación de comparación si usted está buscando una específica:

if ($imageinfo[2] == IMAGETYPE_IFF) { 
    // Code here 
} 
+1

Tenga en cuenta que la página del manual de PHP citado (http://www.php.net/manual/en/image .constants.php) comienza con constantes llamadas 'IMAGE_JPG',' IMAGE_GIF'. Estas NO son las constantes correctas. Desea constantes que están más abajo en la página y comienzan con 'IMAGETYPE_GIF',' IMAGETYPE_PNG' y más ... me llevó una hora encontrar el error. –

2

Citando the manual:

Índice 2 es uno de los IMAGETYPE_XXX constantes que indican el tipo de la imagen de .

Y usted puede encontrar esas constantes ONH this page, entre la otra definida por GD

1

Si desea convertir valor devuelto por getimagesize() como índice de 2 en algo más legible, es posible considerar el uso de una función como ésta:

$imageTypeArray = array 
(
    0=>'UNKNOWN', 
    1=>'GIF', 
    2=>'JPEG', 
    3=>'PNG', 
    4=>'SWF', 
    5=>'PSD', 
    6=>'BMP', 
    7=>'TIFF_II', 
    8=>'TIFF_MM', 
    9=>'JPC', 
    10=>'JP2', 
    11=>'JPX', 
    12=>'JB2', 
    13=>'SWC', 
    14=>'IFF', 
    15=>'WBMP', 
    16=>'XBM', 
    17=>'ICO', 
    18=>'COUNT' 
); 

$size = getimagesize($filename); 

$size[2] = $imageTypeArray[$size[2]]; 

o algo similar.

0

Las páginas anteriores se hace referencia en las constantes de imagen sólo dan la imagen constantes nombres, no los números enteros almacenados en las constantes de imagen.Los scripts anteriores dan los enteros, pero encontré una lista de los enteros en una página oficial de manual de PHP en http://www.php.net/manual/en/function.exif-imagetype.php

3

Como las constantes mencionadas anteriormente que comienzan con IMAGETYPE en get_defined_constants() enumeran los tipos de imágenes compatibles.

Sin embargo, si sólo ejecuta este y que le dirá cuáles son compatibles:

function imageTypes() { 

    $imageTypes = array(); 

    foreach(get_defined_constants() as $key => $value){ 
     $keyStart = explode('_', $key); 
     if($keyStart[0] == 'IMAGETYPE'){ 
      array_push($imageTypes, $key); 
     } 
    } 
    return $imageTypes; 
} 

echo "<pre>"; 
var_dump(imageTypes()); 
echo "</pre>"; 
Cuestiones relacionadas