2009-08-15 4 views
10

Кто-нибудь знает все возможные результаты для 3-го значения, возвращаемого функцией PHP getimagesize()? Пример этого ниже код будет возвращать:Какие типы файлов вызывает PHP getimagesize() return?

  • $imageinfo['2'] = 2; для jpg изображений,
  • $imageinfo['2'] = 3; для png изображений,
  • $imageinfo['2'] = 0; для gif изображения.

Номера могут быть неверными, но вы получите эту идею.

Я не могу найти на php.net или где-либо еще список всех возможных результатов для третьего значения.

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

ответ

28

Выполнить это:

print_r(get_defined_constants()); 

А затем искать константы с префиксом IMAGETYPE_. На моей установке PHP 5.3 Я получил эти значения:

[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 

Как вы можете видеть, Flash SWF считаются изображения, а на самом деле getimagesize() умеет читать ширину и высоту SWF объекта. Для меня это показалось мне любопытством, когда я впервые его обнаружил, поэтому упомянул об этом здесь.

+0

Хороший ответ. Я добавил еще один ответ, который включает фрагмент кода, который будет выполнять фильтрацию типов файлов изображений для вас. – mjsa

5

Этот индекс содержит значение одного из PHP. Весь список из них можно найти на этой странице, внизу. Эта страница не предоставляет фактическое значение INT каждого, но вы должны иметь возможность напечатать несколько, чтобы получить значения по мере необходимости. Вы можете также сделать проверку сравнения, если вы ищете конкретный один:

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

BEWARE что страница цитирует PHP руководство (http://www.php.net/manual/en/image .constants.php) начинается с констант, называемых 'IMAGE_JPG',' IMAGE_GIF'. Это НЕ правильные константы. Вы хотите, чтобы константы находились дальше страницы и начинались с 'IMAGETYPE_GIF',' IMAGETYPE_PNG' и т. Д. ... мне потребовался час, чтобы найти ошибку. –

2

Цитирование the manual:

Index 2 является одним из IMAGETYPE_XXX констант, указывающих на тип изображения.

И вы можете найти эти константы ONH this page, среди другой определяется GD

1

Если вы хотите конвертировать значение, возвращенное getimagesize() как индекс 2 в нечто более удобной для восприятия человеком, вы можете рассмотреть возможность использования функции, как это:

$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]]; 

Или что-то подобное.

0

Приведенные выше упомянутые страницы на константы изображения только придать изображению постоянные имена, а не в целые числа, хранящиеся в констант изображения.Сценарии выше дают целые числа, но я нашел список целых чисел на официальной странице руководства PHP по адресу http://www.php.net/manual/en/function.exif-imagetype.php

3

Как уже упоминалось ранее, константы, которые начинаются с IMAGETYPE в списке get_defined_constants(), поддерживаются типы изображений.

Однако, если вы просто запустите это и он расскажет вам, какие из них поддерживаются:

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>";