2009-08-15 14 views
10

Czy ktoś zna wszystkie możliwe wyniki dla trzeciej wartości zwracanej przez funkcję getimagesize() PHP? Przykład ten kod poniżej powróci:Jakie typy plików zwraca PHP getimagesize()?

  • $imageinfo['2'] = 2; dla jpg obrazu,
  • $imageinfo['2'] = 3; dla png obrazu,
  • $imageinfo['2'] = 0; na gif obrazu.

Liczby mogą nie być poprawne powyżej, ale masz pomysł.

Nie mogę znaleźć na php.net lub gdziekolwiek indziej listy wszystkich możliwych wyników dla 3. wartości.

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

Odpowiedz

28

wykonać to:

print_r(get_defined_constants()); 

a następnie szukać stałych prefiksem IMAGETYPE_. Na mojej instalacji PHP 5.3 Mam następujące wartości:

[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 

Jak widać Flash SWF są traktowane obrazy i faktycznie getimagesize() jest w stanie odczytać wysokość i szerokość obiektu SWF. Dla mnie to wydawało się ciekawostką, kiedy ją po raz pierwszy odkryłem, dlatego wspomniałem o tym tutaj.

+0

Dobra odpowiedź, dodałem kolejną odpowiedź, która zawiera fragment kodu, który zrobi filtrowanie typów plików graficznych. – mjsa

5

Ten indeks zawiera wartość jednego z PHP IMAGETYPE_XXX constants. Całą ich listę można znaleźć na tej stronie, na dole. Ta strona nie podaje rzeczywistej wartości INT każdego z nich, ale powinieneś być w stanie wydrukować kilka, aby uzyskać niezbędne wartości. Można również zrobić test porównawczy jeśli szukasz konkretnego jednego:

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

Pamiętaj, że cytowany strona podręcznika PHP (http://www.php.net/manual/en/image .constants.php) zaczyna się od komunikatów zwanych 'IMAGE_JPG',' IMAGE_GIF'. NIE są to właściwe stałe. Chcesz stałych, które są dalej w dół strony i zaczynają się od 'IMAGETYPE_GIF',' IMAGETYPE_PNG' i tak dalej ... zajęło mi godzinę, aby znaleźć błąd. –

2

Cytowanie the manual:

Index 2 jest jednym z IMAGETYPE_XXX stałych określających typ obrazu.

i można znaleźć te stałe ONH this page między drugą określony przez GD

1

Jeśli chcesz konwertować wartość zwracana przez getimagesize() jako indeks 2 w coś bardziej czytelnej dla człowieka, można rozważyć użycie funkcji takich jak ten:

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

lub coś podobnego.

0

wskazanym powyżej strona stałych obrazów dać obraz tylko stale nazwy, a nie całkowitymi przechowywane w stałych obrazów.Powyższe skrypty dają liczby całkowite, ale znalazłem listę liczb całkowitych na oficjalnej stronie podręcznika PHP pod adresem http://www.php.net/manual/en/function.exif-imagetype.php

3

Jak wcześniej wspomniano, stałe, które zaczynają się od IMAGETYPE w get_defined_constants(), zawierają listę obsługiwanych typów obrazów.

Jednakże, jeśli po prostu uruchomić to i powie to, które z nich są obsługiwane:

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>"; 
Powiązane problemy