Какие типы файлов возвращает PHP getimagesize()?

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

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

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

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

$imageinfo = getimagesize($imageurl);
$image_type = $imageinfo['2'];
7 ответов

Выполните следующее:

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. Для меня это показалось мне любопытством, когда я впервые его обнаружил, и почему он упомянул его здесь.


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

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


Как упоминалось ранее, константы, которые начинаются с 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 class="prettyprint linenums">";
var_dump(imageTypes());
echo "
";


Цитата руководство:

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

И вы можете найти эти константы onh эту страницу, среди других, определенных GD


getimagesize возвращает значение одного из следующих IMAGETYPE_* константы.


Если вы хотите преобразовать значение, возвращаемое 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]];

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


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

licensed under cc by-sa 3.0 with attribution.